Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java控制台上打印.dat的正确方法是什么?_Java_Fileinputstream_Fileoutputstream - Fatal编程技术网

在Java控制台上打印.dat的正确方法是什么?

在Java控制台上打印.dat的正确方法是什么?,java,fileinputstream,fileoutputstream,Java,Fileinputstream,Fileoutputstream,在Java控制台上打印.dat的正确方法是什么 public void open(){ try { FileInputStream inFile = new FileInputStream("C:"+File.separatorChar+"transactions.dat"); ObjectInputStream in = new ObjectInputStream(inFile); //While (in.read

在Java控制台上打印.dat的正确方法是什么

public void open(){
    try {
        FileInputStream inFile =
            new FileInputStream("C:"+File.separatorChar+"transactions.dat");
        ObjectInputStream in = new ObjectInputStream(inFile);
        //While (in.readLine!=null){
            System.out.print(in.readLine());}
        in.close();
    } catch (FileNotFoundException ex) {
        System.out.println(ex);
    } catch (Exception ex) {
        ex.printStackTrace();
    } finally{  }
}
这只给出单行的结果,字符大小不同 如何读取所有数据并以可读输出打印到控制台上

当我在这个dat文件中进行原始写入时,我使用

FileOutputStream outFile =
    new FileOutputStream("C:"+File.separatorChar+"transactions.dat");
ObjectOutputStream out = new ObjectOutputStream(outFile);
out.writeChars(brokerageAcc1.toString());

如果这是您正在编写和读取的文本,那么您应该使用Writer和Reader类,用BufferedWriter和BufferedReader包装,以提供行处理

FileOutputStream outFile =
    new FileOutputStream("C:"+File.separatorChar+"transactions.dat");
BufferedWriter writer = new BufferedWriter(new Writer(outFile));
writer.write(Acc1.toString());
// maybe write a newline??
writer.newLine();
然后使用缓冲读取器将其读回:

FileInputStream inFile =
    new FileInputStream("C:"+File.separatorChar+"transactions.dat");
BufferedReader reader = new BufferedReader(new InputStreamReader(inFile));
while (true) {
    String line = reader.readline();
    if (line == null) break;
    System.out.println(line);
}

如果控制台上的字符大小不同,则控制台本身配置为以比例字体显示文本。这必须在控制台上进行调整,不能从java应用程序进行控制

您正在写入ObjectOutputStream。这有点奇怪,但您可能对此有要求。要读取这样的文件,请使用以下代码注释:我稍微更改了您的编写算法!不包括流关闭和异常处理

// writing

FileOutputStream outFile = new FileOutputStream("C:"+File.separatorChar+"transactions.dat");
ObjectOutputStream out = new ObjectOutputStream(outFile);

String s = brokerageAcc1.toString();
out.writeInt(s.length());
System.out.println(s.length());

out.writeChars(s);

// reading

FileInputStream inFile = new FileInputStream("C:"+File.separatorChar+"transactions.dat");
ObjectInputStream in = new ObjectInputStream(inFile);
int length = in.readInt();     // get the number of chars
System.out.println(""+length);
StringBuilder result = new StringBuilder();
for (int i = 0; i < length; i++)
  result.append(in.readChar());
System.out.println(result.toString());

阅读java.io中关于读写器的更多信息,它可以帮助您处理字符串输入和输出结果。appendin.readChar;此行给出java.io.DataInputStream.readCharUnknown源处java.io.ObjectInputStream$BlockDataInputStream.readCharUnknown源处java.io.EOFEException异常java.io.ObjectInputStream.readCharUnknownSource@Jenifer-你改变了写作部分了吗?我又添加了两行调试代码,请检查,这两行打印的值是否相同。EOF不应该发生。@Jenifer-又做了一个更改-有可能brokerageAcc1.toString在读取长度和字符串之间发生更改。将其存储到变量中。
// writing

FileOutputStream outFile = new FileOutputStream("C:"+File.separatorChar+"transactions.dat");
ObjectOutputStream out = new ObjectOutputStream(outFile);

String s = brokerageAcc1.toString();
out.writeInt(s.length());
System.out.println(s.length());

out.writeChars(s);

// reading

FileInputStream inFile = new FileInputStream("C:"+File.separatorChar+"transactions.dat");
ObjectInputStream in = new ObjectInputStream(inFile);
int length = in.readInt();     // get the number of chars
System.out.println(""+length);
StringBuilder result = new StringBuilder();
for (int i = 0; i < length; i++)
  result.append(in.readChar());
System.out.println(result.toString());