代码之家  ›  专栏  ›  技术社区  ›  Brian

无法使用新文件构造函数的父参数和子参数用Java创建文件

  •  1
  • Brian  · 技术社区  · 6 年前

    我试图用Java创建一个文件。我要在“文档”目录的子文件夹中创建此文件。我希望此子文件夹以今天的日期为基础。

    思想 我知道如何使用 File 类和 file.mkdirs() 方法正确,但我想我没有。

    以下是我所拥有的:

    public class FileTest {
        private static final String sdfTimestampFormat = "yyyy-MM-dd HH:mm:ss Z";
        private static final SimpleDateFormat timestampSDF = new SimpleDateFormat(sdfTimestampFormat);
    
        private static final String sdfDirFormat = "yyyy-MM-dd";
        private static final SimpleDateFormat dirSDF = new SimpleDateFormat(sdfDirFormat);
    
        public static void test() throws FileNotFoundException, IOException{
            Date rightNow = new Date();
            String data = "the quick brown fox jumps over the lazy dog";
            String path = System.getProperty("user.home");
            String filename = "file.txt";
    
            String directory_name = path + System.getProperty("file.separator") + "Documents" + System.getProperty("file.separator") + dirSDF.format(rightNow);
    
            File file = new File(directory_name, filename);
    
            if(file.mkdirs()){
                  String outstring = timestampSDF.format(rightNow) + " | " + data + System.getProperty("line.separator");
                  FileOutputStream fos = new FileOutputStream(file, true);
                  fos.write(outstring.getBytes());
                  fos.close();
            }
        }
    }
    

    正在发生的是 目录 创建时间:

     C:\Users\<username>\Documents\2018-08-03\file.txt\
    

    我的印象是 Parent 新的参数 文件 构造函数是基本目录,而 Child 新的参数 文件 构造函数就是文件本身。

    不是这样吗?我需要两个吗 文件 对象,一个用于基本目录,另一个用于文件?

    我想要的是:

    C:\Users\<username>\Documents\2018-08-03\file.txt
    

    谢谢。

    1 回复  |  直到 6 年前
        1
  •  1
  •   gtgaxiola    6 年前

    mkdirs() 将对路径中的每个元素执行目录(如果它们不存在)。

    所以你可以用 file.getParentFile().mkdirs() 不为您的 file.txt

    编辑:需要考虑的事情

    mkdirs() 仅当它实际创建了目录时才返回true。如果它们已经存在或者产生了问题,它就会返回。 false

    由于您试图多次运行此命令以附加到文本中,因此逻辑将不会在 if-statement

    我会改成:

    boolean created = true;
    if(!file.getParentFile().exists()) {
        created = file.getParentFile().mkdirs();
    }
    if (created) {
        String outstring = timestampSDF.format(rightNow) + " | " + data + System.getProperty("line.separator");
        FileOutputStream fos = new FileOutputStream(file, true);
        fos.write(outstring.getBytes());
        fos.close();
    }