mkdirs 不足、将string字符串保存到本地文件(FileWriter)

一、 mkdirs()不足

  1. mkdirs()可以建立多级文件夹
  2. mkdir()只会建立一级的文件夹

这边有2个问题:

  1. mkdirs单纯创建文件夹会缺失最后一层的目录
  2. 剩余空间不足以建立目录会出现问题,不抛出IO异常

当多线程的时候为了严谨可以加上文件锁 FileChannel.tryLock()

当空间不足的时候的产生:

mkdirs只能返回 true 和 false. 但是貌似不抛出IO异常, 当磁盘空间满的时候,就会发生创建失败的原因

这边有2种思路

第一种:

不用考虑这个情况,当你服务器上的空间不够的时候,或服务器的空间缩小到一定程度时,写个脚本,将一些日志文件或其它文件移动到其它的目录下就可以不用考虑mkdir会存在空间不够的情况

第二种:

File类有一个方法可以得到剩余的空间,根据空间做处理
getFreeSpace ()、getUsableSpace ()、getTotalSpace ()

二、 FileWriter说明

FileWriter是用来方便的将字符数据写入文件的类,这个类的构造函数假设默认的字符编码方式和缓冲区大小的可被接受的,如果要改变指定编码和缓冲区大小可以用FileOutputStream来构造一个OutputStreamWriter来实现。

  1. 当文件没有找到时,一般是可以自动创建文件,但这也和平台有关,有的平台不允许创建文件
  2. FileWriter是用来写字符流的,如果要写字节流数据,请使用FileOutputStream。

主要的构造函数有:

01、FileWriter(File file):
用File对象来构造FileWriter,写数据时,从文件开头开始写起,会覆盖以前的数据

02、FileWriter(File file, boolean append)
还是用File对象构造,如果第二个参数为true的话,表示以追加的方式写数据,从文件尾部开始写起

03、FileWriter(FileDescriptor fd, boolean append)
用文件描述符来构造,第二个参数为true的话,表示以追加的形式写入数据

04、FileWriter(String fileName)
用文件的路径名来构造FileWriter

三 、将string文本写入文件保存到本地:

FileWriter(File file, boolean append),append为true时为追加模式,false或缺省则为覆盖模式

public static void main(String[] args) throws IOException {
        FileWriter writer = null;
        try {
            String content = "你好";
            //保存到项目的根目录
            String realFolder = "myFile/" + new SimpleDateFormat("yyyy/MM/dd").format(Calendar.getInstance().getTime())+"/";
            String createPath=realFolder+"null";//多一层假目录-用于创建文件夹
            File destFile = new File(createPath);
            // 创建文件夹
            if (!destFile.getParentFile().exists()) {
                //有个缺陷-创建不到最后一层的目录
                boolean b = destFile.getParentFile().mkdirs();
                System.out.println("创建结果:" + b);
            }

            String sfm = new SimpleDateFormat("HH时mm分ss秒").format(System.currentTimeMillis());
            File checkFile = new File(realFolder + sfm + ".txt");

            if (!checkFile.exists()) {
                checkFile.createNewFile();// 创建目标文件
            }
            // FileWriter(File file, boolean append),append为true时为追加模式,false或缺省则为覆盖模式
            writer = new FileWriter(checkFile);
            writer.append(content);//将文本输入
            writer.flush();
        } catch (Exception e) {
            System.out.println("保存失败=>" + e.getMessage());
        } finally {
            if (null != writer) {
                writer.close();
            }
        }
    }

效果:在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

suqinyi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值