java关于文件操作的一些注意事项

说明

最近处理一个项目bug的时候,针对文件处理的bug很多,这里总结一下。

文件删除

Java对文件删除存在两种方式:

File file = new File(path);
file.delete();
file.deleteOnExit();

对于第一种,file.delete() 删除是即时生效的。后来,我们在代码中使用这个代码块(仅针对文件)

            while (file.exists()) {
                file.delete();
            }

对于第二种,file.deleteOnExit();文件不会立即删除。只有在程序运行结束的时候,才会检查文件是否存在,如果存在则删除,否则不做任何操作。

就我们自己的系统而言,需要来在一个固定的目录(对存储空间有要求)下生成一个文件,然后将这个文件的数据copy到另一个文件中。因此,需要不断的删除已经存在的旧文件,并新建新的文件——有点类似于日志的记录。因此,我们只能采用第一种方式来删除文件。

对于另一个项目,他们只需要在系统退出的时候清理掉所有生成的中间文件,因此,他们一般使用第二种方式。在文件读取处理结束后加一句deleteOnExit(),这样的前提是不需要考虑存储空间的大小——文件很少,也很小,但是分布的路径是随机的。好处就是在系统正常退出的时候不需要去判断有哪些文件需要删除,也不需要去检查文件是否真的存在。

针对多层文件夹的删除

public void delete(String path) {
        File file = new File(path);
        if (!file.exists()) {
            return;
        }
        if (file.isFile()) {
            //删除单个文件
            file.delete();
        } else {
            String[] childList = file.list();
            //循环删除子文件夹下的文件
            for (String childPath : childList) {
                String child = path + "\\" + childPath;
                delete(child);
            }
            //删除空文件夹
            file.delete();
        }
    }

文件创建

目前没有遇到坑,主要的代码问题还是因为删除的方式有问题导致的
代码片如下:

            File file = new File(path);
            while (file.exists()) {
                file.delete();
            }

            while (!file.exists()) {
                file.createNewFile();
            }
            file.setWritable(true);
            file.setReadable(true);

文件处理

这一块主要做的是多文件数据比对工作,最后要将文件比对结果写入一个Excel表格中。主要的问题就是数据量太大的时候会导致CPU 100%和内存不够。初步采取的方案是分批次写入多个文件,对每个文件的大小作限制(后续补充)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值