1. Objectifs de base
Utilisez Java pour terminer les opérations suivantes:
Copiez tous les fichiers dans un dossier dans un autre dossier, par exemple, il y a deux dossiers A et B dans le disque F:
Il y a un tas de fichiers en f: / a. Après avoir dirigé le programme Java, tous seront copiés sur f: / b et renommés. Ajoutez le préfixe de Rename_ avant tous les fichiers. S'il y a un dossier à l'intérieur, le dossier ne sera pas renommé. Les fichiers à l'intérieur seront renommés et le préfixe de Rename_ avant tous les fichiers:
2. Processus de production
1. Tout d'abord, la fonction principale est très simple, qui est d'appeler la fonction CopyFolder dans la classe le plus filete ci-dessus.
classe publique FileCopy {public static void main (String args []) {new FileSest (). CopyFolder ("f: / a", "f: / b"); }}Il convient de noter que dans Java, f: / a n'a aucun problème, et f: / a n'est pas non plus un problème, mais puisque / doit être transféré lorsque vous exprimez une chaîne, vous devez l'écrire comme f: // a
2. La clé de l'ensemble du programme est la fonction CopyFolder dans la classe FileTest. Cette fonction est -_- dans cette classe! Veuillez également noter que Java.io. * est présenté au début du programme; Puisque le flux d'entrée et de sortie est utilisé
classe FileTest {public void copyfolder (String oldpath, String newPath) {try {// Si le dossier n'existe pas, créez un nouveau dossier (nouveau fichier (newPath)). MkDirs (); // Lisez le contenu de l'ensemble du dossier dans le tableau de chaîne de fichiers, définissez un curseur I ci-dessous et déménagez vers le bas pour commencer à lire le fichier de tableau FileList = nouveau fichier (oldpath); String [] file = fileList.list (); // Notez que cette température n'est qu'un pointeur de fichiers temporaire // L'ensemble du programme ne crée pas de fichier temporaire Temp = null; pour (int i = 0; i <file.length; i ++) {// Si oldpath se termine par un séparateur de chemin / ou /, alors le nom de fichier / oldpath est bien // sinon, vous devez ajouter un séparateur de chemin après OldPath et ajouter un nom de fichier // qui sait si les paramètres que vous avez passés sont f: / a ou f: / a /? if (oldpath.endswith (file.separator)) {temp = new file (oldpath + file [i]); } else {temp = new File (oldpath + file.separator + file [i]); } // Si le curseur rencontre un fichier if (temp.isfile ()) {fileInputStream input = new FileInputStream (temp); FileOutputStream output = new FileOutputStream (newPath + "/" + "rename_" + (temp.getName ()). ToString ()); octet [] bufferArray = nouveau octet [1024 * 64]; int prereadLength; while ((prereadLength = input.read (bufferArray))! = -1) {output.write (bufferArray, 0, prereadLength); } output.flush (); output.close (); input.close (); } // Si le curseur rencontre un dossier if (temp.isdirectory ()) {copyfolder (oldpath + "/" + file [i], newPath + "/" + file [i]); }}} catch (exception e) {System.out.println ("Erreur dans la copie du contenu du dossier entier"); }}}Il peut être un peu difficile de comprendre quand le curseur rencontre un fichier. En fait, c'est comme ça. Tout d'abord, définissez un flux d'entrée de fichier, spécifiez l'entrée du fichier rencontré par le curseur, puis spécifiez la sortie dans le répertoire de fichiers du nom de fichier NewPath / Rename_old. Après cela, définissez un tableau de tampon. Pour le flux d'entrée de fichier, pour le fichier que vous souhaitez lire, chaque fois que vous appelez la méthode de lecture, il continuera à lire le contenu de la longueur du tableau de tampon du tableau tampon tampon à la position que vous lisez, stockez le contenu de lecture sur le tableau de tampon, écrasez tous les contenus avant le tableau de tampon, puis le flux de sortie de fichier s'épuisera tous les contenus du tableau de tampon à l'emplacement spécifié jusqu'à ce que le flux de fichiers soit sorti de - 1.
Quant à savoir pourquoi le flux d'entrée de fichier peut être en ordre de cette manière, il continuera à lire à l'endroit à l'endroit où se trouve la dernière lecture, car lorsque le fichier doit être lu, la méthode Java encapsulé FileInputStream.read appellera également l'API du système d'exploitation pour lire ces données à son tour. Lors de la lecture des données du fichier, elle doit être séquentielle. Il est impossible de lire d'abord le premier octet, puis le second pour durer un octet. Lorsque la boucle de lecture, la méthode de lecture lira la position ++, de sorte que chaque lecture lit les octets suivants séquentiellement jusqu'à la fin du fichier.
Lorsque le curseur rencontre un dossier, appelez-le à nouveau pour terminer la même opération. C'est ce qu'on appelle l'itération.
3. Par conséquent, toute la procédure est la suivante:
importer java.io. *; / ** * * @param oldpath Le répertoire à copier * @param newpath Le répertoire à copier * * / class filest {public void copyfolder (string oldpath, string newpath) {try {// si le dossier n'existe pas, créer un nouveau dossier (nouveau fichier (newPath)). MKDirs (); // Lisez le contenu de l'ensemble du dossier dans le tableau de chaîne de fichiers, définissez un curseur I ci-dessous et déplacez-le constamment pour commencer à lire ce fichier de tableau fileList = nouveau fichier (oldpath); String [] file = fileList.list (); // Notez que cette température n'est qu'un pointeur de fichiers temporaire // L'ensemble du programme ne crée pas de fichier temporaire Temp = null; pour (int i = 0; i <file.length; i ++) {// Si oldpath se termine par un séparateur de chemin / ou /, alors le nom de fichier / oldpath est bien // sinon, vous devez ajouter un séparateur de chemin après OldPath et ajouter un nom de fichier // qui sait si les paramètres que vous avez passés sont f: / a ou f: / a /? if (oldpath.endswith (file.separator)) {temp = new file (oldpath + file [i]); } else {temp = new File (oldpath + file.separator + file [i]); } // Si le curseur rencontre un fichier if (temp.isfile ()) {fileInputStream input = new FileInputStream (temp); FileOutputStream output = new FileOutputStream (newPath + "/" + "rename_" + (temp.getName ()). ToString ()); octet [] bufferArray = nouveau octet [1024 * 64]; int prereadLength; while ((prereadLength = input.read (bufferArray))! = -1) {output.write (bufferArray, 0, prereadLength); } output.flush (); output.close (); input.close (); } // Si le curseur rencontre un dossier if (temp.isdirectory ()) {copyfolder (oldpath + "/" + file [i], newPath + "/" + file [i]); }}} catch (exception e) {System.out.println ("Erreur dans la copie du contenu du dossier entier"); }}} classe publique FileCopy {public static void main (String args []) {new FileSest (). CopyFolder ("f: / a", "f: / b"); }}Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.