一、 mkdirs()不足
- mkdirs()可以建立多级文件夹
- mkdir()只会建立一级的文件夹
这边有2个问题:
- mkdirs单纯创建文件夹会缺失最后一层的目录
- 剩余空间不足以建立目录会出现问题,不抛出IO异常
当多线程的时候为了严谨可以加上文件锁 FileChannel.tryLock()
当空间不足的时候的产生:
mkdirs只能返回 true 和 false. 但是貌似不抛出IO异常, 当磁盘空间满的时候,就会发生创建失败的原因
这边有2种思路
第一种:
不用考虑这个情况,当你服务器上的空间不够的时候,或服务器的空间缩小到一定程度时,写个脚本,将一些日志文件或其它文件移动到其它的目录下就可以不用考虑mkdir会存在空间不够的情况
第二种:
File类有一个方法可以得到剩余的空间,根据空间做处理
getFreeSpace ()、getUsableSpace ()、getTotalSpace ()
二、 FileWriter说明
FileWriter是用来方便的将字符数据写入文件的类,这个类的构造函数假设默认的字符编码方式和缓冲区大小的可被接受的,如果要改变指定编码和缓冲区大小可以用FileOutputStream来构造一个OutputStreamWriter来实现。
当文件没有找到时,一般是可以自动创建文件,但这也和平台有关,有的平台不允许创建文件
。- 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();
}
}
}
效果: