java - 为什么我无法从我的文件中读取 List 对象(Java IO)
问题描述
我有一个写入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 传递一个保留引用值的变量,您无法更改该值(正确地,您可以更改该值仅限内部方法)
想象一下,在将它传递给方法之前它指向 null
在方法内部,您试图将其指向另一个对象(分配新的引用值)它将在方法结束时被丢弃,它仍然指向 null
推荐阅读
- android - 如何在 Beta 推出后获得选择加入链接(谷歌播放)
- r - 我正在尝试使用日期自定义我的 y 轴。如何消除 R 中日期之间的这种差距?
- php - 控制器变量未传入视图
- javascript - 如何在猫头鹰轮播阶段设置所有不同高度和宽度的图像
- php - 是否有配置或挂钩,以便在添加产品后我可以重定向到购物车?WHMCS
- vue.js - 为什么 purgecss-webpack-plugin 删除 vuetify 样式?
- css - 使用 webpack 导入/应用 CSS 文件
- python - 从 SQL Server 获取数据并更新现有 Excel 工作表,同时保留表格?
- mysql - 出现一般错误:'“mysqldump”'在 laravel 中未被识别为内部或外部命令
- wordpress - 如何在特定页面中禁用 Yoast SEO?