为什么数据文件中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 时,旧数据被删除。至于要保留该数据,我们可以在两个选项之间进行选择:
最好的方法是创建一个 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 是在不删除以前的内容的情况下结合阅读和写作的好方法,如果您愿意,您可以这样做。
另一种方法是先读取然后打开流。
File file = new File ("count.dat");
DataInputStream input = new DataInputStream(new FileInputStream(file));
int count = input.readInt();
然后,在 else 中更改 count++;
的计数声明
特别感谢 user207421 提醒我有关此 post 旧版本的错误。
尽管将整数写入数据文件,但文件中可用的总字节数仍为 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 时,旧数据被删除。至于要保留该数据,我们可以在两个选项之间进行选择:
最好的方法是创建一个 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 是在不删除以前的内容的情况下结合阅读和写作的好方法,如果您愿意,您可以这样做。
另一种方法是先读取然后打开流。
File file = new File ("count.dat"); DataInputStream input = new DataInputStream(new FileInputStream(file)); int count = input.readInt();
然后,在 else 中更改
count++;
的计数声明
特别感谢 user207421 提醒我有关此 post 旧版本的错误。