今天写代码,遇见一个问题:
File fileinfo=new File();
ArrayList<File> list=new ArrayList<File>();
FileStatus[] status2 = fs.listStatus(path);
Path[] listedPaths = FileUtil.stat2Paths(status2);
...
for (Path p : listedPaths) {
fileinfo.setFilesize(Integer.valueOf(String.valueOf(filesize)));
fileinfo.setAuthority(tempfs.getPermission().toString());
...
list.add(fileinfo);
}
发现list中,前面的对象被后面的覆盖了。上网查了,原来add( )方法添加的是对象的引用,每次都更新了这个引用的值,当然list里面的值都一样的。
应该把 File fileinfo=new File(); 放到循环里面,每次都生成一个新的对象。