首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Java中将一个文件附加到另一个文件--为什么我的代码要覆盖?

在Java中将一个文件附加到另一个文件--为什么我的代码要覆盖?
EN

Stack Overflow用户
提问于 2014-11-25 18:28:31
回答 2查看 7K关注 0票数 5

我是一个经验丰富的C++家伙学习Java,并有一个很好的时间学习这个网站。最近,我对Java如何将一个文件附加到另一个文件进行了一些研究。假设我有两个文件。这里是C:\tmp\permFile.txt:

代码语言:javascript
复制
Line A:   abcef
Line B:   ghijk
Line C:   lmnop

下面是C:\tmp\tmpFile.txt:

代码语言:javascript
复制
line 1:   1234567890
line 2:   0123456789
line 3:   9012345678
line 4:   8901234567

这里的目标很简单;我想将tmpFile.txt附加到permFile.txt的末尾。为了做到这一点,我研究了代码,并认为我已经解决了问题。直到今天,我才注意到在运行代码之后,permFile.txt看起来是这样的:

代码语言:javascript
复制
Line A:   abcef
Line B:   ghijk
Line C:   lmnop:   9012345678
line 4:   8901234567

我认为这里发生的是permFile是48个字符长(16个字符/行)。我的代码对tmpFile中的48个字符进行了精确的计数,并从out上的第49个字符开始追加。很奇怪是吧?

下面是代码:

代码语言:javascript
复制
import java.io.*;

public class myProgram {
   public static void main(String[] args) throws IOException {

      // Define two filenames:
      String permFile = "C:\tmp\permFile.txt";
      String tmpFile =  "C:\tmp\tmpFile.txt";

      appendFiles appender = new appendFiles(permFile, tmpFile);
      }
}

public class appendFiles {
    public static void appendFiles(String permFile, String tmpFile) throws IOException {
    // Appends file "tmpFile" to the end of "permFile"
    // Code adapted from:  https://www.daniweb.com/software-development/java/threads/44508/appending-two-java-text-files

        try {
        // create a writer for permFile
        BufferedWriter out = new BufferedWriter(new FileWriter(permFile, true));
        // create a reader for tmpFile
        BufferedReader in = new BufferedReader(new FileReader(tmpFile));
        String str;
        while ((str = in.readLine()) != null) {
            out.write(str);
            }
        in.close();
        out.close();
        } catch (IOException e) {
        }
    }
}

我怀疑我需要做的是添加一行“指向”"out“BufferedWriter到permFile的末尾,而不是开头。但我这样做的尝试是灾难性的,不值得在此详述。另外,我不明白为什么tmpFile的内容不覆盖所有的permFile,如果"out“指向permFile的开头。怀疑我犯了一个简单的新手错误。

非常感谢!-P

PS -不能告诉你我有多喜欢这个网站。我总是试图研究我自己的解决方案,但是当你被一个特定的问题困住时,没有什么可以代替向真正的人寻求帮助。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-11-25 18:43:27

只需在打印中添加一个换行符,如下:

代码语言:javascript
复制
out.write("\n" + str);

这对我有用。perm文件在方法运行后包含:

代码语言:javascript
复制
Line A:   abcef
Line B:   ghijk
Line C:   lmnop
line 1:   1234567890
line 2:   0123456789
line 3:   9012345678
line 4:   8901234567
票数 2
EN

Stack Overflow用户

发布于 2014-11-25 18:47:53

在循环之前和每次迭代结束时添加一个out.newline();,它就可以工作了。

代码语言:javascript
复制
out.newline();
while ((str = in.readLine()) != null) {
    out.write(str);
    out.newline();
}

此外,小挑剔,你应该打印的异常,当你抓住他们,否则他们会被忽视。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27134058

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档