1. Objetivos básicos
Use Java para concluir as seguintes operações:
Copie todos os arquivos em uma pasta para outra pasta, por exemplo, existem duas pastas A e B no disco F:
Existem vários arquivos em f:/a. Depois de executar o programa Java, todos eles serão copiados para f:/b e renomeados. Adicione o prefixo de renomeação_ antes de todos os arquivos. Se houver uma pasta dentro, a pasta não será renomeada. Os arquivos internos serão renomeados e o prefixo de renomeação_ antes de todos os arquivos:
2. Processo de produção
1. Primeiro de tudo, a função principal é muito simples, que é chamar a função da cópia na classe FileTest acima.
classe pública Filecopy {public static void main (string args []) {new FileTest (). copyFolder ("f:/a", "f:/b"); }}Vale a pena notar que em Java, f:/a não tem problema e f:/a também não tem problema, mas, como/deve ser transferido ao expressar uma string, você deve escrevê -lo como f: // a
2. A chave para todo o programa é a função da cópia na classe FileTest. Esta função é -_- nesta classe! Além disso, observe que Java.io.* é introduzido no início do programa; Como o fluxo de entrada e saída é usado
classe filetest {public void copyFolder (string OldPath, string newPath) {try {// Se a pasta não existir, crie uma nova pasta (new File (newPath)). mkdirs (); // Leia o conteúdo de toda a pasta para a matriz da string de arquivo, defina um cursor abaixo e mova para baixo para começar a ler o arquivo de matriz filelels = new File (OldPath); String [] arquivo = filelist.list (); // Observe que esta temperatura é apenas um ponteiro de arquivo temporário // o programa inteiro não cria um arquivo temporário temp = null; para (int i = 0; i <file.length; i ++) {// Se o antigo caminho termina com um separador de caminho/ou/, então o nome da pista antiga/arquivo ficará bem // caso contrário, você precisará adicionar um separador de caminho após o OldPath e adicionar um nome de arquivo // que sabe se os parâmetros que você passou são f:/a ou f:/a/? if (OldPath.endSwith (file.separator)) {temp = new File (OldPath + File [i]); } else {temp = new File (OldPath + file.separator + arquivo [i]); } // Se o cursor encontrar um arquivo se (temp.isfile ()) {FileInputStream input = new FileInputStream (temp); FileOutputStream output = new FileOutputStream (newPath + "/" + "rename_" + (temp.getName ()). ToString ()); byte [] bufferArray = novo byte [1024 * 64]; int prereadLength; while ((prereadLength = input.read (bufferArray))! = -1) {output.write (bufferArray, 0, prereadLength); } output.flush (); output.Close (); input.Close (); } // Se o cursor encontrar uma pasta if (temp.isdirectory ()) {copyFolder (antigo e "/" + arquivo [i], newPath + "/" + arquivo [i]); }}} catch (Exceção e) {System.out.println ("Erro ao copiar o conteúdo inteiro da pasta"); }}}Pode ser um pouco difícil de entender quando o cursor encontra um arquivo. De fato, é assim. Primeiro, defina um fluxo de entrada de arquivo, especifique a entrada do arquivo encontrado pelo cursor e especifique a saída no diretório de arquivos do nome do arquivo newPath/rename_old. Depois disso, defina uma matriz de buffer. Para o fluxo de entrada do arquivo, para o arquivo que você deseja ler, cada vez que você ligar para o método de leitura, ele continuará lendo o conteúdo do comprimento da matriz de buffer do buffer de matriz de buffer para a posição que você lê, armazenar o conteúdo de leitura na matriz de buffer, sobrescrepora todo o conteúdo antes da matriz do buffer e, em seguida, a saída do arquivo -a saída do arquivo -a saída de arquivo de entrada de flash, com o fluxo de flash, o cofre de flash em que o fluxo de flash -strated.
Quanto ao motivo pelo qual o fluxo de entrada do arquivo pode estar em ordem dessa maneira, ele continuará a ler ao local onde está a última leitura, porque quando o arquivo deve ser lido, o método Java encapsulado FileInputStream.read também chamará a API do sistema operacional para ler esses dados, por sua vez. Ao ler os dados do arquivo, eles devem estar no sequencial. É impossível ler o primeiro byte primeiro e depois o segundo a durar byte. Ao ler Loop, o método de leitura lerá a posição ++, para que cada leitura leia os seguintes bytes sequencialmente até que o final do arquivo seja encontrado.
Quando o cursor encontrar uma pasta, basta chamá -lo novamente para concluir a mesma operação. Isso é chamado de iteração.
3. Portanto, todo o procedimento é o seguinte:
importar java.io.*; / **** @param OldPath O diretório a ser copiado* @param newPath O diretório a ser copiado**/ class FileTest {public void copyFolder (String OldPath, String newPath) {try {// Se a pasta não existir, crie uma nova pasta (novo arquivo (newPath). Mkdirs (); // Leia o conteúdo de toda a pasta na matriz da string de arquivo, defina um cursor que eu abaixo e mova -o constantemente para começar a ler este arquivo de matriz filelelist = new File (OldPath); String [] arquivo = filelist.list (); // Observe que esta temperatura é apenas um ponteiro de arquivo temporário // o programa inteiro não cria um arquivo temporário temp = null; para (int i = 0; i <file.length; i ++) {// Se o antigo caminho termina com um separador de caminho/ou/, então o nome da pista antiga/arquivo ficará bem // caso contrário, você precisará adicionar um separador de caminho após o OldPath e adicionar um nome de arquivo // que sabe se os parâmetros que você passou são f:/a ou f:/a/? if (OldPath.endSwith (file.separator)) {temp = new File (OldPath + File [i]); } else {temp = new File (OldPath + file.separator + arquivo [i]); } // Se o cursor encontrar um arquivo se (temp.isfile ()) {FileInputStream input = new FileInputStream (temp); FileOutputStream output = new FileOutputStream (newPath + "/" + "rename_" + (temp.getName ()). ToString ()); byte [] bufferArray = novo byte [1024 * 64]; int prereadLength; while ((prereadLength = input.read (bufferArray))! = -1) {output.write (bufferArray, 0, prereadLength); } output.flush (); output.Close (); input.Close (); } // Se o cursor encontrar uma pasta if (temp.isdirectory ()) {copyFolder (antigo e "/" + arquivo [i], newPath + "/" + arquivo [i]); }}} catch (Exceção e) {System.out.println ("Erro ao copiar o conteúdo inteiro da pasta"); }}} classe pública Filecopy {public static void main (string args []) {new FileTest (). copyFolder ("f:/a", "f:/b"); }}O exposto acima é todo o conteúdo deste artigo. Espero que seja útil para o aprendizado de todos e espero que todos apoiem mais o wulin.com.