我正在尝试将一个文件的内容复制到新文件中,并且在新文件中以某种方式丢失新行并将其创建为一行,我猜它与缓冲区位置有关。 按照我正在使用的代码..
List<String> lines;
FileChannel destination = null;
try
{
lines = Files.readAllLines(Paths.get(sourceFile.getAbsolutePath()), Charset.defaultCharset());
destination = new FileOutputStream(destFile).getChannel();
ByteBuffer buf = ByteBuffer.allocate(1024);
for (String line : lines)
{
System.out.println(line);
buf.clear();
buf.put(line.getBytes());
buf.flip();
while (buf.hasRemaining())
{
destination.write(buf);
}
}
}
finally
{
if (destination != null)
{
destination.close();
}
}
答案 0 :(得分:4)
在buff.put(System.getProperty("line.separator").toString());
buf.put(line.getBytes());
答案 1 :(得分:1)
您写入字节的行:
buf.put(line.getBytes());
...不包括换行符,你只是写每行的字节。您需要在每个实例之后单独编写新行字符。
答案 2 :(得分:1)
您可能更喜欢使用Java 7的Files.copy:
Files.copy(sourceFile.toPath(), destinationFile.toPath(),
StandardCopyOption.REPLACE_EXISTING);
一个人应该自己写一个文件副本。
但是,您当前的版本使用默认平台编码将文件作为文本读取。这在UTF-8(一些非法的多字节序列)上出错,在\u0000
nul char上,将行结尾转换为默认平台。
答案 3 :(得分:0)
这将包括新行:
ByteBuffer bf = null;
final String newLine = System.getProperty("line.separator");
bf = ByteBuffer.wrap((yourString+newLine).getBytes(Charset.forName("UTF-8" )));
答案 4 :(得分:0)
您可以直接使用由System.lineSeparator()
安装的System.getProperty("line.separator")
buff.put(System.lineSeparator().toString());