在java中合并文件

我有一个文件数组,我想将它们合并到一个文件中请给我方法谢谢提前我用过这个但这不起作用

public static void joinf(File f1, File f2){ try{ InputStream in = new FileInputStream(f1); OutputStream out = new FileOutputStream(f2,true); byte[] buf = new byte[8192]; int len; while ((len = in.read(buf)) > 0){ out.write(buf, 0, len); } in.close(); out.close(); System.out.println("File copied."); } catch(FileNotFoundException ex){ System.out.println(ex.getMessage() + " in the specified directory."); System.exit(0); } catch(IOException e){ System.out.println(e.getMessage()); } } public void pro(File a,File[]b){ for(int i=0;i<b.length;i++){ joinf(a,b[i]); } } 

使用IOUtils来做到这一点。 看我的例子:

 import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import org.apache.commons.io.IOUtils; public class SourceCodeProgram { public static void main(String[] args) throws Exception { IOCopier.joinFiles(new File("D:/d.txt"), new File[] { new File("D:/s1.txt"), new File("D:/s2.txt") }); } } class IOCopier { public static void joinFiles(File destination, File[] sources) throws IOException { OutputStream output = null; try { output = createAppendableStream(destination); for (File source : sources) { appendFile(output, source); } } finally { IOUtils.closeQuietly(output); } } private static BufferedOutputStream createAppendableStream(File destination) throws FileNotFoundException { return new BufferedOutputStream(new FileOutputStream(destination, true)); } private static void appendFile(OutputStream output, File source) throws IOException { InputStream input = null; try { input = new BufferedInputStream(new FileInputStream(source)); IOUtils.copy(input, output); } finally { IOUtils.closeQuietly(input); } } } 

如果你不能使用IOUtils lib,那么编写自己的实现。 例:

 class IOUtils { private static final int BUFFER_SIZE = 1024 * 4; public static long copy(InputStream input, OutputStream output) throws IOException { byte[] buffer = new byte[BUFFER_SIZE]; long count = 0; int n = 0; while (-1 != (n = input.read(buffer))) { output.write(buffer, 0, n); count += n; } return count; } public static void closeQuietly(Closeable output) { try { if (output != null) { output.close(); } } catch (IOException ioe) { ioe.printStackTrace(); } } } 

在当前forms中,您的pro方法将文件a附加到每个b文件。 原因是你的joinf(a, b)方法将文件a附加到文件b ,而不是相反。

要修复它,这个:

 joinf(a,b[i]); 

应改为:

 joinf(b[i], a); 

或类似的东西。


仅供参考:代码中存在各种其他问题。 请查看它们,以便下次可以编写更好的代码…

  • 在某些情况下,您的joinf方法可能会泄漏文件描述符 – 应该在finally关闭(显式或隐式)资源。
  • 在类似的库方法中调用System.exit()会使重用变得困难。
  • 你正在丢弃堆栈跟踪。 这将使您的应用程序的现场部署副本的调试变得困难。
  • 处理IOException的策略是错误的。 如果你在那里遇到意外的IOException,有些事情是非常不对的。 打印和继续是一个非常糟糕的主意。
  • 名字projoinf是糟糕的选择。
  • 没有javadocs