简体   繁体   中英

Java Files.copy Multiple Files, Different Names, Same Contents

I am using "Files.copy" to copy files from one directory to another. 1 file will work, but when transferring multiple files, the contents of the copied files are the same, but the names are different. Please ignore bad naming. I am just quickly testing.

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);
}                                      

You are transferring only one file multiple times.

File afile = new File(text);

Source (text) is not changing in loop. i am not sure what is your filePath content

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

if you have two text box ( source directory and Destination directory) to get the source and destination .

Then you can get list of files from source like this.

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

and loop through flist to get the files like this.

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);
        }

    }

检索新文件时,getText方法是否应该不在循环中?

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM