gpt4 book ai didi

java - 在文件处理中如何从 char[] 数组读取文件?

转载 作者:行者123 更新时间:2023-12-01 08:05:11 26 4
gpt4 key购买 nike

这是将一个文件的文本复制到另一个文件的代码。

   public class Writer 
{
public static void main(String args[]) throws IOException
{
File f=new File("D:/test.txt");
FileReader fr=new FileReader(f);
char cbuff[]=new char[(int)f.length()];
int c=fr.read(cbuff);

fr.close();

FileWriter fw=new FileWriter("D:/newTest.txt");
fw.write(cbuff);
fw.close();
}
}

我想知道这条线的作用

char cbuff[]=new char[(int)f.length()];

FileReader 如何识别将其读取的文件文本存储到此 cbuff[] 中?
当我评论这一行时

int c=fr.read(cbuff);

代码不起作用。为什么?

最佳答案

好的,首先,这是一个适用于任何文件的代码,而不仅仅是文本文件:

final Path src = Paths.get("D:/test.txt");
final Path dst = Paths.get("D:/newTest.txt");
Files.copy(src, dst);

现在,您的代码已严重损坏。让我们从这个开始:

char cbuff[]=new char[(int)f.length()];

这将创建一个与文件大小相同的char数组;但它没有考虑到 byte<->char 映射不是 1 到 1 的事实。例如,如果文件采用 UTF-8 编码,“à "以两个字节编码;因此,char 数组至少会长一个元素。在 UTF-16(每个 char 是两个 byte)甚至 UTF-32 中情况更糟。

第二个问题:

FileReader fr=new FileReader(f);

未指定编码;使用默认的 JVM 编码。

因此,如果您尝试使用默认 JVM 编码 windows-1252 读取以 UTF-8 编码的文件,您将损坏目标文件

输出文件也是如此:未指定编码。这样的文件本质上是“不可移植的”。

第三个问题:有:

int c=fr.read(cbuff);

这将返回实际读取的字符数;很好。

但是当你写回文件时这并没有被使用!写入代码应该是:

fw.write(cbuff, 0, c);

关于java - 在文件处理中如何从 char[] 数组读取文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22296679/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com