gpt4 book ai didi

java - 使用 Java 将二进制 PGM 文件转换为 ASCII PGM 文件?使用 FileWriter 给出空文件

转载 作者:行者123 更新时间:2023-11-30 07:31:37 25 4
gpt4 key购买 nike

如何使用 Java 将二进制 PGM 文件转换为 ASCII PGM 文件?

当我使用以下代码时,我无法在 B.pgm 中写入 ASCII 值。我也尝试过使用dos.writeInt

FileInputStream inRaw = null;
FileOutputStream outRaw = null;
try {
inRaw = new FileInputStream("A.pgm");
outRaw = new FileOutputStream("B.pgm");
} catch (FileNotFoundException e) {
e.printStackTrace();
}

DataInputStream dis = new DataInputStream(inRaw);
DataOutputStream dos = new DataOutputStream(outRaw);
int i = 0;
String temp = null;
temp = dis.readLine();
System.out.println(temp);
dos.writeBytes("P2");
dos.writeBytes("\n");
while(i < 3){
temp = dis.readLine();
System.out.println(temp);
dos.writeBytes(temp);
dos.writeBytes("\n");
i++;
}
int t = 0;
while(dis.available() != 0){
t = dis.read();
System.out.println(t);
fileWriter.write(t);
dos.writeInt(t);
dos.writeBytes("\n");
}

dis.close();
dos.close();

我尝试使用 FileWriter 而不是 DataOutputStream 并且代码生成一个空文件,我不明白为什么?

FileInputStream inRaw = null;
FileOutputStream outRaw = null;
try {
inRaw = new FileInputStream("A.pgm");
outRaw = new FileOutputStream("B.pgm");
} catch (FileNotFoundException e) {
e.printStackTrace();
}

DataInputStream dis = new DataInputStream(inRaw);
FileWriter fileWriter = new FileWriter("B.pgm");
int i = 0;
String temp = null;
temp = dis.readLine();
System.out.println(temp);
fileWriter.write("P2");
fileWriter.write("\n");
while(i < 3){
temp = dis.readLine();
System.out.println(temp);
fileWriter.write(temp);
fileWriter.write("\n");
i++;
}
int t = 0;
while(dis.available() != 0){
t = dis.read();
System.out.println(t);
fileWriter.write(t);
fileWriter.write(t);
fileWriter.write("\n");
}

dis.close();

最佳答案

(这可能无法解决您的问题,但它会让您的代码更加健壮)。

数据未写入文件的可能原因之一是您实际上并未关闭流 - 在此之前它可以保存在内存缓冲区中,并且永远不会写出。您当然不会显式调用 fileWriter.close()

可以尝试手动关闭流,但这通常是不必要的,而且在所有情况下正确执行此操作都非常棘手。

使用 try-with-resources 更容易 - 这会自动管理您的流,并保证它们在 block 结束时关闭。

try (FileInputStream inRaw = new FileInputStream("A.pgm");
FileOutputStream outRaw = new FileOutputStream("B.pgm");
DataInputStream dis = new DataInputStream(inRaw);
DataOutputStream dos = new DataOutputStream(outRaw)) {
// The logic to read dis and write it to dos.
} catch (IOException e) {
e.printStackTrace();
}
// No need to close the streams - that happened automatically.

您可以对第二个版本执行类似的操作,方法是将 FileWriter fileWriter = new FileWriter(outRaw) 替换为 DataOutputStream dos = ...

<小时/>

如果这不能解决眼前的问题,我建议您的逻辑有错误。尝试使用调试器单步执行代码 - 确保 write 调用确实正在执行。

关于java - 使用 Java 将二进制 PGM 文件转换为 ASCII PGM 文件?使用 FileWriter 给出空文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36032053/

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