【发布时间】:2020-10-02 17:32:39
【问题描述】:
我有一个方法将List<String> 写入文件,如下所示:
public static void main(String[] args) {
List<String> data = Arrays.asList("1", "2", "3", "4", "5");
writeObjectToFile(data, "demo.dat");
List<String> result = null;
readObjectFromFile(result, "demo.dat");
System.out.println(result);
}
使用writeObjectToFile 方法:
public static <T> void writeObjectToFile(List<T> obj, String fileName) {
File file = new File(fileName);
FileOutputStream fos = null;
ObjectOutputStream oos = null;
try {
fos = new FileOutputStream(file);
oos = new ObjectOutputStream(fos);
oos.writeObject(obj);
} catch (Exception e) {
e.printStackTrace();
} finally {
// close fos, oos, ...
}
}
和readObjectFromFile 方法:
public static <T> void readObjectFromFile(List<T> obj, String fileName) {
File file = new File(fileName);
FileInputStream fis = null;
ObjectInputStream ois = null;
if (file.exists()) {
try {
fis = new FileInputStream(file);
ois = new ObjectInputStream(fis);
Object readObject = ois.readObject();
obj = (List<T>) readObject;
System.out.println(obj);
} catch (Exception e) {
e.printStackTrace();
} finally {
// close fis, ois,...
}
}
}
向文件写入数据正常,但读取步骤未按预期工作。我得到result 列表是null:
// console output
[1, 2, 3, 4, 5] // --> this is result of System.out.println(obj);
null // --> this is result of System.out.println(result);
但是当我改变阅读方式返回一个列表时:
public static <T> List<T> readObjectFromFile(String fileName) {
File file = new File(fileName);
FileInputStream fis = null;
ObjectInputStream ois = null;
if (file.exists()) {
try {
fis = new FileInputStream(file);
ois = new ObjectInputStream(fis);
Object readObject = ois.readObject();
List<T> obj = (List<T>) readObject;
System.out.println(obj);
return obj;
} catch (Exception e) {
e.printStackTrace();
} finally {
// close fis, ois,...
}
}
return null;
}
然后我得到了预期的结果:
// console output
[1, 2, 3, 4, 5] // --> this is result of System.out.println(obj);
[1, 2, 3, 4, 5] // --> this is result of System.out.println(result);
我不知道为什么。为什么当我将result 列表作为参数传递时,我无法得到预期的结果?请帮帮我。
【问题讨论】:
标签: java java-io fileinputstream objectinputstream