【发布时间】:2016-04-09 16:11:24
【问题描述】:
再来一次
你好,
重试我的问题
我从网上下载了一个文件,就是这个:
它是 94159 字节,检查一下,一切似乎都很好。现在我想把这个文件读成一个字符串,操作它,然后保存它。读取文件后,我将其打印到控制台,似乎它没有读取整个文件(最后的部分丢失)。 保存后只有91000字节。
我尝试了不同的阅读方法,所以我认为不是问题,例如:
String fileTo = new String(Files.readAllBytes(Paths.get(fileFullPath)), StandardCharsets.UTF_8);
(与扫描仪、流相同的结果)
可能与文件本身有关。我的 Mac 上的文件是 utf-8 格式的,也许原来不是?我真的不知道可能是什么原因。 感谢您的帮助。
编辑:
我是这样下载的:
try (InputStream fileReader = new BufferedInputStream(
conn.getInputStream());
OutputStream fileWriter = new BufferedOutputStream(
new FileOutputStream(fileFullPath)))
{
int readByte;
while ((readByte = fileReader.read()) != -1)
{
fileWriter.write(readByte);
}
【问题讨论】:
-
如何保存文件?我的猜测是,这个文件中的 3 行代码太长了,你的控制台会截断它们。
-
这样保存:try (PrintStream out = new PrintStream(new FileOutputStream(fileFullPath))) { out.print(fileTo); }
-
当你转换成字符串时,你得到的字符可能比你的字节少,因为你可能有多字节字符。
-
如果你想复制一个文件,我建议你读为字节,一次复制 8192 个字节。无需读取为字符串并可能发送字符编码消息。我怀疑你写的字符编码和你读的不一样,这意味着字节数可能不同。
-
这使用您的默认编码而不是原始编码。使用
try (Writer out = new OutputStreamWriter(new FileOutputStream(path), StandardCharsets.UTF_8)) { out.write(fileTo); }