Μερικά σενάρια απαιτούν να αντιγράψετε ένα αρχείο σε Java. Μπορεί να δημιουργείτε ένα απλό σενάριο για την αυτοματοποίηση των διαδικασιών για έναν διαχειριστή αρχείων. Θα μπορούσατε ακόμη και να γράφετε μια πλήρης εφαρμογή που λειτουργεί με αρχεία.
Υπάρχουν πολλοί τρόποι με τους οποίους μπορείτε να αντιγράψετε ένα αρχείο, ανάλογα με την απαιτούμενη απόδοση, την απλότητα ή ακόμα και την έκδοση Java που χρησιμοποιείτε.
Πώς να αντιγράψετε αρχεία χρησιμοποιώντας το FileInputStream και το FileOutputStream
Αυτή η μέθοδος λειτουργεί με μη αυτόματη ανάγνωση κάθε byte δεδομένων από το αρχείο και εγγραφή σε έναν νέο προορισμό. Σε αντίθεση με τη μέθοδο Files.copy παρακάτω, μπορείτε να χρησιμοποιήσετε αυτήν τη μέθοδο για όλες τις εκδόσεις Java, συμπεριλαμβανομένης της Java 6 και προγενέστερων.
Χρησιμοποιεί την κλάση FileInputStream για να διαβάσει byte από ένα αρχείο προέλευσης και το FileOutputStream για να γράψει byte στον προορισμό.
- Δημιουργήστε ένα αρχείο οπουδήποτε στον υπολογιστή σας με το όνομα "SimpleScript.java".
- Ανοίξτε το αρχείο σε ένα πρόγραμμα επεξεργασίας κειμένου ή IDE και αντιγράψτε τον ακόλουθο βασικό κώδικα στην εφαρμογή.
εισαγωγή java.io. IOException;
τάξηSimpleScript{
δημόσιοστατικόςκενόςκύριος(Args χορδών[])ρίχνει IOException {
// Ο κωδικός σας εδώ
}
} - Εισαγάγετε αυτές τις πρόσθετες κλάσεις ροής εισόδου και ροής εξόδου στο επάνω μέρος του αρχείου, αμέσως μετά την πρώτη δήλωση εισαγωγής.
εισαγωγή java.io. Αρχείο;
εισαγωγή java.io. InputStream;
εισαγωγή java.io. OutputStream;
εισαγωγή java.io. FileInputStream;
εισαγωγή java.io. FileOutputStream; - Δημιουργήστε ένα νέο αρχείο με το όνομα "Copy-File-1.txt", στον ίδιο φάκελο με το αρχείο SimpleScript.java. Προσθέστε οποιοδήποτε γραπτό περιεχόμενο μέσα στο αρχείο.
- Στον ίδιο φάκελο, δημιουργήστε επίσης έναν νέο κατάλογο που ονομάζεται "Προορισμός". Ο στόχος είναι να αντιγράψετε το αρχείο "Copy-File-1.txt" στον νέο φάκελο.
- Μέσα στην κύρια συνάρτηση της κλάσης, χρησιμοποιήστε την κλάση Αρχείο για να δημιουργήσετε δύο νέα αντικείμενα αρχείου. Η πηγή, η οποία θα είναι το αρχείο που θέλετε να αντιγράψετε, και ο προορισμός, όπου θα θέλετε να αντιγράψετε το αρχείο. Εάν το αρχείο προορισμού δεν υπάρχει, το πρόγραμμά σας θα δημιουργήσει ένα νέο.
τάξηSimpleScript{
δημόσιοστατικόςκενόςκύριος(Args χορδών[])ρίχνει IOException {
// 1ος τρόπος αντιγραφής αρχείου
Πηγή αρχείου = νέος Αρχείο("Αντιγραφή-Αρχείο-1.κείμενο");
Προορισμός αρχείου = νέος Αρχείο("Προορισμός/Αντιγραφή-Αρχείο-1.κείμενο");
}
} - Μετά από αυτό, δημιουργήστε ένα αντικείμενο InputStream και OutputStream.
Εισαγωγή ροής εισόδου = μηδενικό;
OutputStream Έξοδος = μηδενικό; - Χρησιμοποιήστε τη ροή εισόδου για να διαβάσετε τα δεδομένα σε byte και τη ροή εξόδου για να γράψετε τα δεδομένα στη νέα θέση.
προσπαθήστε {
// Δημιουργία αντικειμένων FileInputStream και FileOutputStream
είσοδος = νέος FileInputStream (πηγή);
έξοδος = νέος FileOutputStream (προορισμός);
ψηφιόλεξη[] buf = νέοςψηφιόλεξη[1024];
ενθ bytesRead;// Γράψτε byte στον προορισμό
ενώ ((bytesRead = input.read (buf)) > 0) {
output.write (buf, 0, bytesRead);
}
} σύλληψη (IOException e) {
e.printStackTrace();
System.out.println("Δεν ήταν δυνατή η αντιγραφή του αρχείου στον προορισμό: " + destination.getPath() + ". Ελεγχος αν ο φάκελος ή το αρχείο υπάρχει ήδη.");
} τελικά {
// Κλείσιμο των ροών
αν (εισαγωγή != μηδενικό) {
input.close();
}αν (έξοδος != μηδενικό) {
output.close();
}
}System.out.println("Αρχείο αντιγράφηκε");
- Για να εκτελέσετε το σενάριο, ανοίξτε μια γραμμή εντολών. Μεταβείτε στο φάκελο όπου αποθηκεύσατε το αρχείο Java χρησιμοποιώντας την εντολή cd στο Γραμμή εντολών των Windows ή το τερματικό Mac.
CD Επιφάνεια εργασίας
- Για να μεταγλωττίσετε το σενάριο, αποθηκεύστε το αρχείο Java και εκτελέστε το Javac εντολή στη γραμμή εντολών:
javac SimpleScript.java
- Για να εκτελέσετε το σενάριο, χρησιμοποιήστε το Ιάβα εντολή:
Θα πρέπει να δείτε μια γραμμή εξόδου χωρίς σφάλματα:java SimpleScript
- Μεταβείτε στον φάκελο "Προορισμός" για να δείτε το αντιγραμμένο αρχείο σας.
- Ανοίξτε το αρχείο για να δείτε το περιεχόμενο, το οποίο το πρόγραμμά σας αντέγραψε από το αρχικό αρχείο.
Πώς να αντιγράψετε αρχεία χρησιμοποιώντας το Files.copy
Εάν χρησιμοποιείτε Java 7 ή νεότερη έκδοση, μπορείτε να χρησιμοποιήσετε τη μέθοδο Files.copy. Αυτή η μέθοδος είναι γενικά μια απλούστερη υλοποίηση. Σύμφωνα με την Τεκμηρίωση Java, υπάρχουν πολλές υπερφορτώσεις για τη λειτουργία.
Για παράδειγμα, η μέθοδος Files.copy μπορεί επίσης να χρησιμοποιήσει μια ροή εισόδου για την αντιγραφή αρχείων από μια τοποθεσία σε άλλη, αλλά μέσω μιας μεθόδου που χρησιμοποιεί λιγότερο κώδικα. Μπορείτε επίσης να χρησιμοποιήσετε Διαδρομές ή να καθορίσετε μόνοι σας πώς θέλετε η μέθοδος να αντιγράψει το αρχείο σας.
- Δημιουργήστε ένα νέο αρχείο με το όνομα "Copy-File-2.txt", στον ίδιο φάκελο με το αρχείο SimpleScript.java. Προσθέστε οποιοδήποτε γραπτό περιεχόμενο μέσα στο αρχείο.
- Στο επάνω μέρος του αρχείου, προσθέστε εισαγωγές για το "java.nio.file. Paths" και "java.nio.file. Αρχεία» τάξεις.
εισαγωγή java.nio.file. Μονοπάτια;
εισαγωγή java.nio.file. Αρχεία? - Προσθέστε δύο συμβολοσειρές, που αντιπροσωπεύουν τη σχετική διαδρομή αρχείου για το αρχείο προέλευσης και τον προορισμό. Χρησιμοποιήστε τη μέθοδο Files.copy, η οποία θα χειριστεί ήδη τη λογική για την αντιγραφή του αρχείου στον προορισμό.
String copySource = "Αντιγραφή-Αρχείο-2.κείμενο";
String copyDestination = "Προορισμός/Αντιγραφή-Αρχείο-2.κείμενο";προσπαθήστε {
Files.copy (Paths.get (copySource), Paths.get (copyDestination));
} σύλληψη (Εξαίρεση ε) {
System.out.println("Δεν ήταν δυνατή η αντιγραφή του αρχείου στον προορισμό: " + copyDestination + ". Ελεγχος αν ο φάκελος ή το αρχείο υπάρχει ήδη.");
}
System.out.println("2nd Αρχείο αντιγράφηκε"); - Εκτελέστε το σενάριο χρησιμοποιώντας τις εντολές Javac και Java.
- Μεταβείτε στον φάκελο "Προορισμός" για να δείτε το αντιγραμμένο αρχείο σας.
Πώς να αντιγράψετε αρχεία χρησιμοποιώντας το FileChannel.transferTo()
Σύμφωνα με την Τεκμηρίωση Java, αυτή η μέθοδος μπορεί να είναι ένας δυνητικά ταχύτερος τρόπος αντιγραφής αρχείων. Ωστόσο, αυτό θα εξαρτηθεί από τον τρόπο υλοποίησης της συνάρτησης.
- Δημιουργήστε ένα νέο αρχείο με το όνομα "Copy-File-3.txt", στον ίδιο φάκελο με το αρχείο SimpleScript.java. Προσθέστε κάποιο δείγμα περιεχομένου σε αυτό το αρχείο.
- Στην κορυφή του SimpleScript.java, εισαγάγετε τα "java.nio.channels. κλάση FileChannel" μαζί με τρεις από τις προηγούμενες κοινές κλάσεις που σχετίζονται με αρχεία από το πακέτο io.
εισαγωγή java.io. Αρχείο;
εισαγωγή java.io. FileInputStream;
εισαγωγή java.io. FileOutputStream;
εισαγωγή java.nio.channels. FileChannel; - Δημιουργήστε αντικείμενα αρχείου για την πηγή και τον προορισμό και χρησιμοποιήστε τα για να δημιουργήσετε μια ροή εισόδου και μια ροή εξόδου.
Αρχείο src = νέος Αρχείο("Αντιγραφή-Αρχείο-3.κείμενο");
Αρχείο dst = νέος Αρχείο("Προορισμός/Αντιγραφή-Αρχείο-3.κείμενο");
FileInputStream inStream = νέος FileInputStream (src);
FileOutputStream outStream = νέος FileOutputStream (dst); - Χρησιμοποιήστε τη μέθοδο TransferTo από την κλάση FileChannel για να αντιγράψετε το αρχείο στον προορισμό του.
προσπαθήστε {
FileChannel inChannel = inStream.getChannel();
FileChannel outChannel = outStream.getChannel();
inChannel.transferTo(0, inChannel.size(), outChannel);
} σύλληψη (Εξαίρεση ε) {
System.out.println("Δεν ήταν δυνατή η αντιγραφή του αρχείου στον προορισμό: " + dst.getPath() + ". Ελεγχος αν ο φάκελος ή το αρχείο υπάρχει ήδη.");
} τελικά {
// Κλείσιμο των ροών
inStream.close();
outStream.close();
}
System.out.println("3rd Αρχείο αντιγράφηκε"); - Εκτελέστε το σενάριο χρησιμοποιώντας τις εντολές Javac και Java.
- Μεταβείτε στον φάκελο "Προορισμός" για να δείτε το αντιγραμμένο αρχείο σας.
Η αντιγραφή αρχείων σε Java είναι μόνο η αρχή
Υπάρχουν πολλοί τρόποι με τους οποίους μπορείτε να αντιγράψετε ένα αρχείο σε Java. Τρεις πιθανοί τρόποι περιλαμβάνουν τη χρήση της παραδοσιακής μεθόδου ροής, της μεθόδου Files.copy ή της μεθόδου transferTo.
Υπάρχουν πολλές άλλες λειτουργίες διαχείρισης αρχείων που μπορείτε να εκτελέσετε χρησιμοποιώντας Java. Μερικά από αυτά περιλαμβάνουν τη μετακίνηση αρχείων, τη διαγραφή αρχείων ή τη συμπίεση αρχείων. Αυτά μπορεί να είναι χρήσιμα για να μάθετε εάν χρειάζεται να αυτοματοποιήσετε ορισμένες διαδικασίες στη διαχείριση αρχείων.