我是一个经验丰富的C++家伙学习Java,并有一个很好的时间学习这个网站。最近,我对Java如何将一个文件附加到另一个文件进行了一些研究。假设我有两个文件。这里是C:\tmp\permFile.txt:
Line A: abcef
Line B: ghijk
Line C: lmnop下面是C:\tmp\tmpFile.txt:
line 1: 1234567890
line 2: 0123456789
line 3: 9012345678
line 4: 8901234567这里的目标很简单;我想将tmpFile.txt附加到permFile.txt的末尾。为了做到这一点,我研究了代码,并认为我已经解决了问题。直到今天,我才注意到在运行代码之后,permFile.txt看起来是这样的:
Line A: abcef
Line B: ghijk
Line C: lmnop: 9012345678
line 4: 8901234567我认为这里发生的是permFile是48个字符长(16个字符/行)。我的代码对tmpFile中的48个字符进行了精确的计数,并从out上的第49个字符开始追加。很奇怪是吧?
下面是代码:
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 -不能告诉你我有多喜欢这个网站。我总是试图研究我自己的解决方案,但是当你被一个特定的问题困住时,没有什么可以代替向真正的人寻求帮助。
发布于 2014-11-25 18:43:27
只需在打印中添加一个换行符,如下:
out.write("\n" + str);这对我有用。perm文件在方法运行后包含:
Line A: abcef
Line B: ghijk
Line C: lmnop
line 1: 1234567890
line 2: 0123456789
line 3: 9012345678
line 4: 8901234567发布于 2014-11-25 18:47:53
在循环之前和每次迭代结束时添加一个out.newline();,它就可以工作了。
out.newline();
while ((str = in.readLine()) != null) {
out.write(str);
out.newline();
}此外,小挑剔,你应该打印的异常,当你抓住他们,否则他们会被忽视。
https://stackoverflow.com/questions/27134058
复制相似问题