Java中的文件处理(扩展名为.dat的二进制文件)返回未知编译时错误


void abIn()throws IOException
{
FileOutputStream fos=new FileInputStream("abc.dat");
DataOutputStream dos = new DataInputStream(fos);
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
for(int i=0;i<5;i++)
{
System.out.println("Enter PC, Price Quantity  "+(i+1));
pc=Integer.parseInt(br.readLine());
up=Double.parseDouble(br.readLine());
q=Integer.parseInt(br.readLine());
dos.writeInt(pc);
dos.writeDouble(up);
dos.writeInt(q);
}
dos.close();
fos.close();
}
void abOut()throws IOException
{
FileInputStream fin=new FileInputStream("ABC.DAT");
DataInputStream din=new DataInputStream(fin);
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
System.out.println("Enter Product Code");
int x=Integer.parseInt(br.readLine());
boolean EOF =false;
while(!EOF)
{
try
{
int pcx =din.readInt(pc);
int upx=din.readDouble(up);
int qx=din.readInt(q);
if(pcx==x)
{
System.out.println(pcx+" "+upx+" "+q);
}
}
catch(EOFException e)
{}
}
din.close();
fin.close();
}
public static void main()throws IOException
{
f1 ob=new f1();
ob.abIn();
ob.abOut();
}

返回未知编译时错误。我尝试在Java中创建一个包含产品代码、产品价格和数量(单位(的dat文件,然后使用产品代码进行搜索,并获得上面输入的其他详细信息。

有五个编译错误,它们根本不是"未知"的。

f1.java:11: error: incompatible types: FileInputStream cannot be converted to FileOutputStream
FileOutputStream fos=new FileInputStream("abc.dat");
^
f1.java:12: error: incompatible types: FileOutputStream cannot be converted to InputStream
DataOutputStream dos = new DataInputStream(fos);
^
f1.java:39: error: method readInt in class DataInputStream cannot be applied to given types;
int pcx =din.readInt(pc);
^
required: no arguments
found: int
reason: actual and formal argument lists differ in length
f1.java:40: error: method readDouble in class DataInputStream cannot be applied to given types;
int upx=din.readDouble(up);
^
required: no arguments
found: double
reason: actual and formal argument lists differ in length
f1.java:41: error: method readInt in class DataInputStream cannot be applied to given types;
int qx=din.readInt(q);
^
required: no arguments
found: int
reason: actual and formal argument lists differ in length

从前两个开始:

如果要创建FileOutputStream,请创建一个FileOutputStream。DataOutputStream也是如此。您不能创建一个对象来读取文件,然后告诉它写入文件。事实并非如此。

所以,你需要改变这些:

FileOutputStream fos=new FileInputStream("abc.dat");
DataOutputStream dos = new DataInputStream(fos);

到这些:

FileOutputStream fos=new FileOutputStream("abc.dat");
DataOutputStream dos = new DataOutputStream(fos);

剩下的错误非常明显。DataInputStream方法readInt和readDouble不接受任何参数。

如果你想从水龙头里取水,你不会指望只为取水而提供自己的水。类似地,当您想要读取整数值时,不应该提供整数值;调用readInt的全部意义在于,您没有整数值,并且希望DataInputStream为您提供一个整数值。

因此,您不应该将您自己的值传递给读取方法。您应该传递零个参数(也就是说,用空括号调用方法(。

此外,在Java中,方法的名称和参数都是唯一标识的,因此必须传递与该方法声明的参数完全相同的参数。readIntreadDouble被声明为接受零个参数,因此必须传递零个参数。

因此,您应该更改这三行:

int pcx =din.readInt(pc);
int upx=din.readDouble(up);
int qx=din.readInt(q);

到此:

int pcx =din.readInt();
int upx=din.readDouble();
int qx=din.readInt();

最后,您不应该忽略EOFException。这个异常意味着没有更多的数据可以读取,那么你为什么要继续尝试读取数据呢?

正确的做法是停止读取数据:

catch (EOFException e)
{
break;
}

由于从未使用过EOF变量,因此实际上可以将循环重写为:

try
{
while (true)
{
int pcx = din.readInt();
int upx = din.readDouble();
int qx = din.readInt();
if (pcx == x)
{
System.out.println(pcx+" "+upx+" "+q);
}
}
}
catch(EOFException e)
{
System.out.println("No more data.");
}

遇到异常时,循环将退出。

相关内容

  • 没有找到相关文章

最新更新