Java 如何将一个文件合并到另一个\Linux

Java 如何将一个文件合并到另一个\Linux,java,linux,cat,Java,Linux,Cat,我试图使用Java程序中的linux命令将一个文本文件附加到另一个文本文件。我对Linux完全陌生。我尝试过分类,但效果很好,所以我不知道使用“cat”有什么不对。 请你检查一下我的代码,帮我找出我做错了什么 public static void mergeRecords(String fileName, String overflowFileName) { String command = "cat " + overflowFileName + " >> " + fileN

我试图使用Java程序中的linux命令将一个文本文件附加到另一个文本文件。我对Linux完全陌生。我尝试过分类,但效果很好,所以我不知道使用“cat”有什么不对。 请你检查一下我的代码,帮我找出我做错了什么

public static void mergeRecords(String fileName, String overflowFileName)
{
    String command = "cat " + overflowFileName + " >> " + fileName;
    try {
        Process r = Runtime.getRuntime().exec(command);
    } catch (Exception e) {
        throw new RuntimeException(e);
    }
}
Runtime#exec
不是shell

这是一个非常普遍的误解。您需要做的是:

  • 使用命令
    cat file1 file2
    创建一个
    进程
  • 以该过程的输出为例
  • 将输出转储到文件中
提示:使用
ProcessBuilder
,这将使您的工作更轻松。

运行时#exec
不是shell

这是一个非常普遍的误解。您需要做的是:

  • 使用命令
    cat file1 file2
    创建一个
    进程
  • 以该过程的输出为例
  • 将输出转储到文件中

提示:使用
ProcessBuilder
,这将使您的工作更加轻松。

正如其他人所指出的,您不应该使用外部命令来完成Java可以轻松完成的任务:

try (OutputStream existingFile = Files.newOutputStream(
    Paths.get(fileName),
    StandardOpenOption.WRITE,
    StandardOpenOption.APPEND)) {

    Files.copy(Paths.get(overflowFileName), existingFile);
}

正如其他人所指出的,您不应该使用外部命令来完成Java可以轻松完成的任务:

try (OutputStream existingFile = Files.newOutputStream(
    Paths.get(fileName),
    StandardOpenOption.WRITE,
    StandardOpenOption.APPEND)) {

    Files.copy(Paths.get(overflowFileName), existingFile);
}

为什么要从java代码调用Linux命令。为什么你不使用java类?ypu能告诉我们如果你运行这个程序会发生什么吗?因为我的教授特别要求我使用Linux命令:)@JensHi,这个命令看起来很好,你能粘贴错误吗?什么都没有发生,文件根本没有合并在一起@JensWhy您正在从java代码调用Linux命令。为什么你不使用java类?ypu能告诉我们如果你运行这个程序会发生什么吗?因为我的教授特别要求我使用Linux命令:)@JensHi,这个命令看起来很好,你能粘贴错误吗?什么都没有发生,文件根本没有合并在一起@JensOr只需添加(如果他使用的是
bash
),是的,这就是问题所在。正如我所说的,我对Linux完全陌生,而且作业截止日期很短,所以我没有做太多研究。我使用了ProcessBuilder,现在它可以工作了:)谢谢,或者只是添加(如果他使用的是
bash
),是的,这就是问题所在。正如我所说的,我对Linux完全陌生,而且作业截止日期很短,所以我没有做太多研究。我使用了ProcessBuilder,现在它可以工作了:)谢谢你为什么要使用
BufferedOutputStream
?老实说,我从来没有看到这与“经典”的输出流在速度上有任何区别,至少就文件I/O而言……FileOutputStream类似于C的write(),而BufferedOutputStream类似于C的fwrite(),所以这通常是一个很好的实践。但是你让我好奇,所以我查看了Files类的源代码…它确实为Files.copy(Path,OutputStream,options)和Files.copy(InputStream,Path,options)做了自己的缓冲。这意味着,至少对于这两种方法,不需要BufferedOutputStream和BufferedInputStream。我已经删除了它。为什么要使用
缓冲输出流
?老实说,我从来没有看到这与“经典”的输出流在速度上有任何区别,至少就文件I/O而言……FileOutputStream类似于C的write(),而BufferedOutputStream类似于C的fwrite(),所以这通常是一个很好的实践。但是你让我好奇,所以我查看了Files类的源代码…它确实为Files.copy(Path,OutputStream,options)和Files.copy(InputStream,Path,options)做了自己的缓冲。这意味着,至少对于这两种方法,不需要BufferedOutputStream和BufferedInputStream。我把它拿走了。