读取和写入文件时,输出发生变化
When reading and writing a file the output changes
我正在尝试读取一个文件(与扩展名无关)并在此之后写入,但是当我这样做时,输出文件与输入文件不同。
我的代码是下一个:
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);
但我不想用这种方式来做,因为如果我想加载大文件,堆大小就不够了,这可以通过 "line per line" 读取来解决。
感谢您的回答
我会推荐阅读 this question 之前。由于您正在将二进制数据读入字符串,因此您正在更改该数据的编码。所以输出会不一样。
最好的方法是将二进制文件作为字节数组读取。但我将取决于您需要使用哪种类型的 transformation/edition/changes。
更新
而且,当然,您在写作之前编辑您的内容
while ((line= br.readLine()) != null) {
content += line + "\n";
}
所以你的输出文件总是不同的。
更新 2
因为 question/problem 是读取大二进制文件的方法,所以 google 通常是你的朋友。
或者您可以查看其他 question
我正在尝试读取一个文件(与扩展名无关)并在此之后写入,但是当我这样做时,输出文件与输入文件不同。
我的代码是下一个:
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);
但我不想用这种方式来做,因为如果我想加载大文件,堆大小就不够了,这可以通过 "line per line" 读取来解决。
感谢您的回答
我会推荐阅读 this question 之前。由于您正在将二进制数据读入字符串,因此您正在更改该数据的编码。所以输出会不一样。
最好的方法是将二进制文件作为字节数组读取。但我将取决于您需要使用哪种类型的 transformation/edition/changes。
更新
而且,当然,您在写作之前编辑您的内容
while ((line= br.readLine()) != null) {
content += line + "\n";
}
所以你的输出文件总是不同的。
更新 2
因为 question/problem 是读取大二进制文件的方法,所以 google 通常是你的朋友。 或者您可以查看其他 question