合并文件并删除旧文件

时间:2021-05-17 10:34:50

标签: java

我一直在尝试将两个文件合并到新文件中,下面的代码完成了它的工作。但合并后我想删除旧文件。我用来删除文件的代码只是删除了 1 个文件 (file2),而不是两个文件。

public static void Filemerger() throws IOException  
    { 
        
       String resultPath = System.getProperty("java.io.tmpdir");
       File result = new File(resultPath+"//NewFolder", "//file3.txt"); 
        
        // PrintWriter object for file3.txt 
        PrintWriter pw = new PrintWriter(result); 
          
        // BufferedReader object for file1.txt 
        BufferedReader br = new BufferedReader(new FileReader(resultPath+"file1.txt")); 
          
        String line = br.readLine(); 
          
        // loop to copy each line of  
        // file1.txt to  file3.txt 
        while (line != null) 
        { 
            pw.println(line); 
            line = br.readLine(); 
        } 
        
        pw.flush();
          
        br = new BufferedReader(new FileReader(resultPath+"file2.txt")); 
          
        line = br.readLine(); 
          
        // loop to copy each line of  
        // file2.txt to  file3.txt 
        while(line != null) 
        { 
            pw.println(line); 
            line = br.readLine(); 
        } 
          
        pw.flush(); 
          
        // closing resources 
        br.close(); 
         
        pw.close(); 
        
        File dir = new File(resultPath);
        
        FileFilter fileFilter1 = new WildcardFileFilter(new String[] {"file1.txt", "file2.txt"}, IOCase.SENSITIVE); 
        File[] fileList1 = dir.listFiles(fileFilter1);
            
        for (int i = 0; i < fileList1.length; i++) {
              if (fileList1[i].isFile()) {
                  
                File file1 = fileList1[i].getAbsoluteFile();
                file1.delete();
              }
        }
        
    }

我也尝试使用此代码删除file1,如上代码删除file2:

Path fileToDeletePath = Paths.get(resultPath+"file1.txt");
       Files.delete(fileToDeletePath);

但它抛出一个异常 线程“main”中的异常 java.nio.file.FileSystemException: C:\Users\haya\AppData\Local\Temp\file1: The process cannot access the file because it is正在被另一个进程使用。

1 个答案:

答案 0 :(得分:3)

按照评论中的建议关闭流将修复。但是,您正在编写大量代码,这些代码以后很难调试/修复。而是简化为 NIO 调用并添加 try 和资源处理以在途中自动关闭所有内容:

    String tmp  = System.getProperty("java.io.tmpdir");
    Path result = Path.of(tmp, "NewFolder", "file3.txt");
    Path file1  = Path.of(tmp,"file1.txt");
    Path file2  = Path.of(tmp,"file2.txt");

    try(OutputStream output = Files.newOutputStream(result)) {
        try(InputStream input = Files.newInputStream(file1))  {
            input.transferTo(output);
        }
        try(InputStream input = Files.newInputStream(file2))  {
            input.transferTo(output);
        }
    }
    Files.deleteIfExists(file1);
    Files.deleteIfExists(file2);