一、代码
package com.task.test;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
public class T5 {
public static void main(String[] args) throws IOException {
List<String> list = new ArrayList<>();
list.add("1");
list.add("2");
list.add("3");
T5.generateText2("E:/1/2/3/4/5/file2.txt",list);
T5.generateText1("E:/1/2/3/4/5/file1.txt",list);
}
public static void generateText1(String fileName,List<String> list) throws IOException{
/* 写入Txt文件 */
File writename = new File(fileName);
if(!writename.isFile() && !writename.exists()){ //判断文件是否存在){}
String path = fileName.substring(0,fileName.lastIndexOf("/"));
new File(path).mkdirs();
String name = fileName.substring(fileName.lastIndexOf("/"));
new File(name).createNewFile();
}
BufferedWriter out = new BufferedWriter(new FileWriter(writename,true));
if (list.size()>0) {
for (int i = 0; i <list.size(); i++) {
out.write(list.get(i));
}
}
out.flush(); // 把缓存区内容压入文件
out.close(); // 最后记得关闭文件
System.out.println("1文件创建成功 = " + fileName);
}
/* 写入Txt文件 */
public static void generateText2(String fileName,List<String> list) throws IOException{
File writename = new File(fileName);
//判断文件是否存在
if(!writename.isFile() && !writename.exists()){
// 创建新文件
writename.createNewFile();
}
BufferedWriter out = new BufferedWriter(new FileWriter(writename,true));
if (list.size()>0) {
for (int i = 0; i <list.size(); i++) {
out.write(list.get(i));
}
}
out.flush(); // 把缓存区内容压入文件
out.close(); // 最后记得关闭文件
System.out.println("2文件创建成功 = " + fileName);
}
}
二、测试结果比较
当先执行方法1,再执行方法2,就没问题
创建文件如图所示
先执行方法2,再执行方法1,就会出现路径找不到
三、代码分析
在两个方法中,后半段的“向文件中填充数据”都是相同的,不同的是,前者先创建了文件目录 new File(path).mkdirs(); ,后创建了文件 new File(name).createNewFile(); 而后者直接创建文件。
查看createNewFile源码:
Atomically创建一个新的空文件,该文件由该抽象路径名命名,当且仅当具有该名称的文件还不存在时。对于可能影响文件的所有其他文件系统活动,检查文件是否存在以及如果文件不存在则创建文件是一个原子操作。
注意:此方法不应用于文件锁定,因为无法使生成的协议可靠地工作。应该使用FileLock功能。
返回:如果命名文件不存在并且已成功创建,则为true;如果命名文件已存在,则为false
表示平台本地文件系统的FileSystem对象。
此抽象路径名的规范化路径名字符串。规范化路径名字符串使用默认的名称分隔符,并且不包含任何重复或冗余的分隔符。
扫描二维码关注公众号,回复:
16337992 查看本文章