为什么数据文件中count的值不增加?

Why does the value of count in the data file not increment?

尽管将整数写入数据文件,但文件中可用的总字节数仍为 0。

public class Q 
{
    public static void main(String[] args) throws IOException 
    {
        DataOutputStream output = new DataOutputStream(new FileOutputStream("count.dat"));
        DataInputStream input = new DataInputStream(new FileInputStream("count.dat"));
        if (input.available()==0) 
        {
            output.writeInt(1);
        }
        else
        {
            int count = input.readInt() + 1;
            System.out.println(count);
            output.writeInt(count);
        }
        output.close();
        input.close();
    }
}

这里的问题是当您创建 FileOutputStream 时,旧数据被删除。至于要保留该数据,我们可以在两个选项之间进行选择:

  1. 最好的方法是创建一个 RandomAccessFile,它的行为类似于一个大字节数组。它具有支持阅读和写作的强大功能。在分析代码之前,我添加了一些注释,让我们先看一下。

    public static void main() throws IOException{
    
        File file = new File ("count.dat");
        RandomAccessFile RAF = new RandomAccessFile(file, "rw"); // rw stands for read and write
    
        if (RAF.length() == 0){ //Checks if file is empty
    
            RAF.writeInt(1);
            System.out.println("File was empty!");
    
        }else{
    
            int count = RAF.readInt() + 1;
            RAF.seek(0); //file pointer at position 0
            System.out.println(count);
            RAF.writeInt(count);
    
        }
    
        RAF.close();
    
    }
    

    首先,我声明了RandomAccessFile。有两个参数,一个是文件,一个是字符串模式,这里有一个list:"rw"(读写),"r","rws"和"rwd"。第一个条件检查文件的长度是否为 0,这意味着它是空的。如果它是真的,我们写一个 int。另一方面,如果为假,我们设置读取存储在文件中的整数并加一。然后,随着指针(根据位置)移动,我们将其设置回位置 0 (RAF.seek(0);)。最后但同样重要的是,我们写入新值,然后关闭文件。

    RandomAccessFile 是在不删除以前的内容的情况下结合阅读和写作的好方法,如果您愿意,您可以这样做。

  2. 另一种方法是先读取然后打开流。

    File file = new File ("count.dat");
    DataInputStream input = new DataInputStream(new FileInputStream(file));
    int count = input.readInt();
    

    然后,在 else 中更改 count++;

  3. 的计数声明

特别感谢 user207421 提醒我有关此 post 旧版本的错误。