【问题标题】:When reading and writing a file the output changes读取和写入文件时,输出会发生变化
【发布时间】:2016-07-21 10:39:26
【问题描述】:

我正在尝试读取一个文件(与扩展名无关)并在此之后写入,但是当我这样做时,输出文件与输入不同。

我的代码是下一个:

OutputStream outputStream = null;
FileReader fr = new FileReader("rute\\inputfile.PNG");
BufferedReader br = new BufferedReader(fr);
String line;
while ((line= br.readLine()) != null) {
    content += line;
}

byte[] toBytes= content.getBytes();
InputStream inputStream = new ByteArrayInputStream(toBytes);
try {
    outputStream = new FileOutputStream(new File("rute\\output.PNG"));
    int read = 0;
    byte[] bytes = new byte[1024];

    while ((read = inputStream.read(bytes)) != -1) {
        outputStream.write(bytes, 0, read);
    }
    outputStream.close();
} catch (Exception e) {
    e.printStackTrace();
}
inputStream.close();

如果你问我为什么转换成字节并从这种形式写入,是因为我需要对数据做一些事情,我需要这种转换。 如果你告诉我我不能在字符串上加载图像,是的,我可以这样做:

File fil = ~~~~;
FileInputStream fis = null;
fis = new FileInputStream(fil);
byte[] bytess = IOUtils.toByteArray(fis);

但我不想这样做,因为如果我想加载大文件,堆大小是不够的,这可以通过“每行一行”读取来解决。

感谢您的回答

【问题讨论】:

  • 问题是什么?
  • 如何在不更改文件的情况下读写文件,或者输出文件与输入不同的问题/原因是什么?

标签: java file file-writing file-read


【解决方案1】:

我会推荐之前阅读this question。由于您正在将二进制数据读入字符串,因此您正在更改该数据的编码。所以输出会有所不同。

最好的方法是将二进制文件作为字节数组读取。但我将取决于您需要对它们进行哪种类型的转换/版本/更改。

更新

当然,你在写作之前正在编辑你的内容

while ((line= br.readLine()) != null) {
   content += line + "\n";
}

所以你的输出文件总是不同的。

更新 2

由于问题/问题是如何读取一个大的二进制文件,google 通常是你的朋友。 或者您可以查看其他question

【讨论】:

  • 但是如果我读取为字节数组,我需要将整个文件加载到数组中,不是吗?我正在每行做一行,因为我可以拆分原始文件并且不会对堆进行过度充电
  • @AlejandroPicosPrieto 什么是二进制文件上下文中的“行”?
  • @AlejandroPicosPrieto 为什么需要它来读取块?您始终可以使用docs.oracle.com/javase/8/docs/api/java/io/…docs.oracle.com/javase/8/docs/api/java/io/…
  • @AlejandroPicosPrieto 创建一个byte[] 作为缓冲区(例如大约 1000 字节),然后从填充缓冲区的文件中读取,处理块,写入它,读取下一个块等。
  • @AlejandroPicosPrieto google 是你的朋友 -> javapractices.com/topic/TopicAction.do?Id=245 在这里你可以看到一些关于如何读取二进制文件的例子。小文件你可以读它,大文件你可以读小块,进入缓冲区
猜你喜欢
  • 1970-01-01
  • 2023-04-09
  • 2012-05-25
  • 1970-01-01
  • 2018-08-07
  • 1970-01-01
  • 1970-01-01
  • 2019-10-25
  • 2013-12-17
相关资源
最近更新 更多