java createNewFile创建文件失败 系统找不到指定的路径

一、代码

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 查看本文章

猜你喜欢

转载自blog.csdn.net/weixin_52255395/article/details/130933375