使用Java将二进制PGM文件转换为ASCII PGM文件?使用FileWriter会生成空文件

使用Java将二进制PGM文件转换为ASCII PGM文件?使用FileWriter会生成空文件,java,fileoutputstream,filewriter,pgm,Java,Fileoutputstream,Filewriter,Pgm,如何使用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 (FileNo

如何使用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.close()

您可以尝试手动关闭流,但这通常是不必要的,而且在所有情况下都很难正确完成

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

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.
对于第二个版本,您可以用
DataOutputStream dos=…
替换
FileWriter FileWriter=newfilewriter(outRaw)



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

在DataOutputStream情况下,您不希望使用
writeInt(t)
写入ascii整数-否则,它将以二进制形式写入数据。@AndyTurner谢谢。:)现在我可以写ASCII pgm文件了。我尝试使用try-catch块,但仍然无法在文件中写入任何内容。我使用了以下FileWriter构造函数
FileWriter FileWriter=newfilewriter(“B.pgm”)
。我会按照你说的进行调试,看看有什么问题。谢谢
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.