我做了一个简单的程序,它有一个存储大量数据的2D String数组。我在很多地方搜索了如何存储和检索2D数组。我想在程序结束时将数据保存在我的数组中,并在程序启动时检索这些数据。我试过了:
ObjectOutputStream toFile = new ObjectOutputStream(new FileWriter("array.DATA"));
toFile.writeObject(array);
这就出现了错误:不兼容的类型:FileWriter无法转换为OutputStream
我只知道基本的编程,所以尽量对我很轻松并解释你所说的一切。如果我诚实,我甚至不知道'ObjectOutputStream'是什么。
非常感谢提前
答案 0 :(得分:1)
在这个例子中: 这个例子非常简单(它不是一个完美的解决方案,但它是解决保存和检索工作方式的良好开端)。
你的2d数组是int [] [] = new int [12] [12];
//或a是String a [] [] = new String [12] [12];
第1部分:(保存)
public void Save(){
try {
PrintWriter writer = new PrintWriter(new File("C:/Users/Alex.hp/Desktop/t.txt"));
for(int i=0; i<a.length; i++){
for(int j=0; j<a[i].length; j++){
//use this if your array has (int,double..)
// writer.write(String.valueOf(a[i][j])+" "); //Here you parse the int from array to String.
//use this if your array has String
writer.write(a[i][j]+" "); //Its String so you dont have to use String.valueOf(something(int,double,...)
}
writer.println(); //leave one line
}
writer.flush(); //flush the writer
writer.close(); //close the writer
} catch (FileNotFoundException e) {
e.printStackTrace();
}
} //方法结束
使用简单的PrintWriter,您可以将数组保存到文件中,无论其格式如何。 只是你知道改变我放到文件的路径;
第2部分:(更新或打开时检索)
public void UpdateOnOpen(){
try {
Scanner scan = new Scanner(new File("C:/Users/Alex.hp/Desktop/t.txt"));
//Retrieve
for(int i=0; i<a.length; i++)
for(int j=0; j<a[i].length; j++){
//if you array use (int,double,...)
//a[i][j]=Interger.parseInt(scan.next()) //for int
//a[i][j]=Double.parseDouble(scan.next()) //for double
//if your array use String
a[i][j]=scan.next(); //Here you retrieve the array again from the file
}//end of for(int j=0; j<a[i].length; j++)
scan.close(); //close the resource file you opened
//Print it to be sure all are right
for(int i=0; i<a.length; i++){
for(int c=0; c<a[i].length; c++)
System.out.printf(""+a[i][c]+",");
System.out.println();
}
} catch (FileNotFoundException e){ e.printStackTrace(); }
}//end of method
使用Scanner类,您可以从保存的文件中检索数组。
也是一个更好的解决方案,但你必须挖掘更多here
让我知道你的工作已经完成..
答案 1 :(得分:1)
还有一个问题需要解决,即如何存储数组的大小以及内容。我建议使用转换为JSON。如果您获得Jackson库,您应该能够使用Jackson Object Mapper。我建议将数组存储在另一个对象中。
e.g。
class MyClass {
String[][] myArray;
// add the getters and setters to this class for myArray too
}
然后存储
MyClass myObject = new MyClass();
// set the arrays here to whatever you like
ObjectMapper mapper = new ObjectMapper();
mapper.write(new File("c:\somedir\somefile.txt"), myObject);
然后加载
ObjectMapper mapper = new ObjectMapper();
MyClass loaded = mapper.readValue(new File("c:\somedir\somefile.txt", MyClass.class);
// then you can use loaded as the source of your data
答案 2 :(得分:0)
您应该使用FileOutputStream。 FileWriter的字符,而ObjectOutputStream是二进制输出流。
public static void main(String[] args) {
try {
ObjectOutputStream toFile = new ObjectOutputStream(new FileOutputStream("//home//user//array.DATA"));
toFile.writeObject(args);
toFile.close();
} catch (Exception e) {
e.printStackTrace();
}
}