1. Objetivos básicos
Use Java para completar las siguientes operaciones:
Copie todos los archivos en una carpeta a otra carpeta, por ejemplo, hay dos carpetas A y B en el disco F:
Hay un montón de archivos en f:/a. Después de ejecutar el programa Java, todos se copiarán a F:/B y renombrarán. Agregue el prefijo de rename_ antes de todos los archivos. Si hay una carpeta adentro, la carpeta no será renombrada. Se cambiarán el nombre de los archivos internos y el prefijo de rename_ antes de todos los archivos:
2. Proceso de producción
1. En primer lugar, la función principal es muy simple, que es llamar a la función CopyFolder en la clase FilEtest anterior.
public class fileCopy {public static void main (string args []) {new Filetest (). CopyFolder ("f:/a", "f:/b"); }}Vale la pena señalar que en Java, f:/a no tiene ningún problema, y f:/a tampoco es ningún problema, pero como/debe transferirse al expresar una cadena, debe escribirla como f: // a
2. La clave para todo el programa es la función CopyFolder en la clase FilEtest. ¡Esta función es -_- en esta clase! Además, tenga en cuenta que Java.io.* se presenta al comienzo del programa; Dado que se usa la secuencia de entrada y salida
class fileTest {public void CopyFolder (String OldPath, String NewPath) {try {// Si la carpeta no existe, cree una nueva carpeta (nuevo archivo (NewPath)). Mkdirs (); // Lea el contenido de toda la carpeta en la matriz de cadenas de archivo, establezca un cursor I a continuación y mueva hacia abajo para comenzar a leer el archivo de matriz filelist = nuevo archivo (OldPath); Cadena [] file = fileList.list (); // Tenga en cuenta que esta temperatura es solo un puntero de archivo temporal // todo el programa no crea un archivo temporal de archivo temp = null; para (int i = 0; i <file.length; i ++) {// Si OldPath termina con un separador de ruta/o/, entonces OldPath/File Name está bien // de lo contrario, debe agregar un separador de ruta después de OldPath y agregar un nombre de archivo // quién sabe si los parámetros que pasó son f:/a o f:/a/? if (oldPath.endswith (file.separator)) {temp = new File (OldPath + File [i]); } else {Temp = nuevo archivo (OldPath + File.separator + File [i]); } // Si el cursor encuentra un archivo if (temp.isfile ()) {fileInputStream input = new FileInputStream (TEMP); FileOutputStream output = new FileOutputStream (NewPath + "/" + "rename_" + (temp.getName ()). ToString ()); byte [] bufferArray = nuevo byte [1024 * 64]; int prereadlength; while ((prereadLength = input.read (bufferArray))! = -1) {output.write (bufferArray, 0, prereadLength); } output.flush (); output.close (); input.close (); } // Si el cursor encuentra una carpeta if (temp.isDirectory ()) {CopyFolder (OldPath + "/" + archivo [i], newpath + "/" + archivo [i]); }}} Catch (Exception e) {System.out.println ("Error al copiar el contenido completo de la carpeta"); }}}Puede ser un poco difícil de entender cuándo el cursor encuentra un archivo. De hecho, es así. Primero, establezca una secuencia de entrada de archivo, especifique la entrada del archivo encontrado por el cursor y luego especifique la salida en el directorio de archivos del nombre del archivo newpath/rename_old. Después de eso, establezca una matriz de búfer. Para la transmisión de entrada de archivo, para el archivo que desea leer, cada vez que llame al método de lectura, continuará leyendo el contenido de la longitud de la matriz de búfer de la matriz de búfer a la posición que lee, almacenará el contenido de lectura en la matriz de búfer en la matriz de búfer en la ubicación de la transmisión de la entrada del archivo hasta el flujo de la entrada del archivo.
En cuanto a por qué la transmisión de entrada del archivo puede estar en orden de esta manera, continuará leyendo hacia atrás a la ubicación donde está la última lectura, porque cuando se lea el archivo, el método de Java encapsulado FileInputStream.read también llamará a la API del sistema operativo para leer estos datos a su vez. Al leer los datos del archivo, debe estar en secuencial. Es imposible leer el primer byte primero y luego el segundo a último byte. Al leer Loop, el método de lectura leerá la posición ++, de modo que cada lectura lea los siguientes bytes secuencialmente hasta que se encuentre el final del archivo.
Cuando el cursor encuentre una carpeta, simplemente llámelo nuevamente para completar la misma operación. Esto se llama iteración.
3. Por lo tanto, todo el procedimiento es el siguiente:
import java.io.*; / **** @param Oldpath El directorio que se copiará* @param newpath El directorio que se copiará**/ class filetest {public void copyfolder (String OldPath, String Newpath) {try {// Si la carpeta no existe, cree una nueva carpeta (nuevo archivo (NewPath)). MkDirs (); // Lea el contenido de toda la carpeta en la matriz de cadenas de archivo, establezca un cursor I a continuación y muévalo constantemente para comenzar a leer este archivo de matriz fileList = nuevo archivo (OldPath); Cadena [] file = fileList.list (); // Tenga en cuenta que esta temperatura es solo un puntero de archivo temporal // todo el programa no crea un archivo temporal de archivo temp = null; para (int i = 0; i <file.length; i ++) {// Si OldPath termina con un separador de ruta/o/, entonces OldPath/File Name está bien // de lo contrario, debe agregar un separador de ruta después de OldPath y agregar un nombre de archivo // quién sabe si los parámetros que pasó son f:/a o f:/a/? if (oldPath.endswith (file.separator)) {temp = new File (OldPath + File [i]); } else {Temp = nuevo archivo (OldPath + File.separator + File [i]); } // Si el cursor encuentra un archivo if (temp.isfile ()) {fileInputStream input = new FileInputStream (TEMP); FileOutputStream output = new FileOutputStream (NewPath + "/" + "rename_" + (temp.getName ()). ToString ()); byte [] bufferArray = nuevo byte [1024 * 64]; int prereadlength; while ((prereadLength = input.read (bufferArray))! = -1) {output.write (bufferArray, 0, prereadLength); } output.flush (); output.close (); input.close (); } // Si el cursor encuentra una carpeta if (temp.isDirectory ()) {CopyFolder (OldPath + "/" + archivo [i], newpath + "/" + archivo [i]); }}} Catch (Exception e) {System.out.println ("Error al copiar el contenido completo de la carpeta"); }}} public class fileCopy {public static void main (string args []) {new Filetest (). CopyFolder ("f:/a", "f:/b"); }}Lo anterior es todo el contenido de este artículo. Espero que sea útil para el aprendizaje de todos y espero que todos apoyen más a Wulin.com.