Java Files.copy多个文件,不同的名称,相同的内容

时间:2014-04-09 19:34:19

标签: java copy move

我正在使用" Files.copy"将文件从一个目录复制到另一个目录。 1个文件可以使用,但是在传输多个文件时,复制文件的内容是相同的,但名称不同。请忽略错误的命名。我正在快速测试。

private void btnOpenActionPerformed(java.awt.event.ActionEvent evt) {                                        
    JFileChooser fc = new JFileChooser();

    fc.setMultiSelectionEnabled(true);
    fc.showOpenDialog(null);
    PathFile = fc.getSelectedFile().getAbsolutePath();
    files = fc.getSelectedFiles();
    int i=files.length;
    System.out.print(i);
    filesPath = Arrays.toString(files);
    txtPath.setText(PathFile);

}                                       

private void btnMoveActionPerformed(java.awt.event.ActionEvent evt) {                                        
    InputStream inStream = null;
    OutputStream outStream = null;
    String text = txtPath.getText();


    String[] list = filesPath.split(",");

    //String extension = filename.substring(filename.lastIndexOf('.'),         filename.length());
    String destPath = txtDest.getText();

    try {



        for(int i = 0; i<list.length; i++){

            String filenamePre = list[i]
                              .replace(",", "")  //remove the commas
                              .replace("[", "")   //remove the right bracket
                              .replace("]", "");

        String filename = filenamePre.substring(filenamePre.lastIndexOf('\\'), filenamePre.length());
         System.out.println(filename);
        File afile = new File(text);
        //File bfile = new File(destPath+"\\file1"+extension);
        File bfile = new File(destPath + filename);

        Path pa = afile.toPath();
        Path pb = bfile.toPath();

        //inStream = new FileInputStream(afile);
        //outStream = new FileOutputStream(bfile);

        //byte[] buffer = new byte[1024];


        //int length;
        //copy the file content in bytes 
       // while ((length = inStream.read(buffer)) > 0) {

           // outStream.write(buffer, 0, length);

        //}

        //inStream.close();
        //outStream.close();


        Files.copy(pa, pb, REPLACE_EXISTING);
        //delete the original file
        //afile.delete();
        }
        System.out.println("File(s) copied successful!");
        System.out.println();
        System.out.println();


    } catch (IOException e) {
        e.printStackTrace();
    }
}                                       

private void txtPathActionPerformed(java.awt.event.ActionEvent evt) {                                        
    // TODO add your handling code here:
}                                       

private void btnOpenDestActionPerformed(java.awt.event.ActionEvent evt) {                                            
    JFileChooser fc = new JFileChooser();

    //guiMove frame = new guiMove();
    fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
    fc.showOpenDialog(null);
    PathDest = fc.getSelectedFile().getAbsolutePath();
    txtDest.setText(PathDest);
}                                      

2 个答案:

答案 0 :(得分:0)

您只是多次传输一个文件。

File afile = new File(text);

源(文本)不会在循环中更改。 我不确定你的filePath内容是什么

String[] list = filesPath.split(",");

如果您有两个文本框(源目录和目标目录)来获取源和目标。

然后你可以从这样的源文件中获取文件列表。

File [] fList = new File(sDir).listFiles();

并循环使用flist来获取这样的文件。

public  void fileCopy(String sourceDir , String destDir) throws IOException{
        File sDir = new File(sourceDir);
        if (!sDir.isDirectory()){
            // throw error
        }
        File dDir = new File(destDir);
        if (!dDir.exists()){
            dDir.mkdir();
        }
        File[] files = sDir.listFiles();
        for (int i = 0; i < files.length; i++) {
            File destFile = new File(dDir.getAbsolutePath()+File.separator+files[i].getName().replace(",", "")  //remove the commas
                    .replace("[", "")   //remove the right bracket
                    .replace("]", "")
                    .replace(" ", ""));
            //  destFile.createNewFile();
            Files.copy(files[i], destFile);
        }

    }

答案 1 :(得分:0)

当你检索新文件时,

不应该在你的循环中使用getText方法吗?