【问题标题】:To create a new directory and a file within it using Java使用 Java 在其中创建新目录和文件
【发布时间】:2013-09-08 19:08:45
【问题描述】:

我正在尝试在此目录中创建一个新目录和一个文件。谁能告诉我哪里出错了?

我使用的是 Windows 系统,我希望该目录出现在我的 .java 文件所在的文件夹中。

import java.io.*;
class  PS_Task1 {
    public static void main(String[] args) {
        try {
            File file = new File("Library\\test.txt");
            file.mkdir();
            file.createNewFile();
        }
        catch(Exception e) {
            System.out.println("ecception");
        }
    }
}

【问题讨论】:

标签: java file directory


【解决方案1】:

基本上,正在发生的事情是,您正在创建一个名为Library\test.txt 的目录,然后尝试创建一个名为相同内容的新文件,这显然行不通。

所以,而不是...

File file = new File("Library\\test.txt");
file.mkdir();
file.createNewFile();

试试……

File file = new File("Library\\test.txt");
file.getParentFile().mkdir();
file.createNewFile();

附加

mkdir 如果失败,实际上不会抛出任何类型的异常,这很烦人,所以相反,我会做一些更像......

File file = new File("Library\\test.txt");
if (file.getParentFile().mkdir()) {
    file.createNewFile();
} else {
    throw new IOException("Failed to create directory " + file.getParent());
}

所以我才知道真正的问题是什么......

附加

目录的创建(在此上下文中)将在您运行程序的位置...

比如你从C:\MyAwesomJavaProjects\FileTest运行程序,就会在这个目录下创建Library目录(即C:\MyAwesomJavaProjects\FileTest\Library)。在与.java 文件相同的位置创建它通常不是一个好主意,因为稍后您的应用程序实际上可能会捆绑到 Jar 中。

【讨论】:

  • 这段代码在windows下工作,在linux下不行。
  • 基本原理 shod 工作,假设你有创建目录/文件的写权限,我在 MacOS 和 Unix 系统上使用相同的技术,它工作正常
【解决方案2】:

这样做是为了在你的项目中创建一个新目录,创建一个文件然后在上面写:

public static void main(String[] args) {
    //System.getProperty returns absolute path
    File f = new File(System.getProperty("user.dir")+"/folder/file.txt");
    if(!f.getParentFile().exists()){
        f.getParentFile().mkdirs();
    }
    //Remove if clause if you want to overwrite file
    if(!f.exists()){
        try {
            f.createNewFile();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    try {
        //dir will change directory and specifies file name for writer
        File dir = new File(f.getParentFile(), f.getName());
        PrintWriter writer = new PrintWriter(dir);
        writer.print("writing anything...");
        writer.close();
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } 

}

【讨论】:

    猜你喜欢
    • 2012-03-29
    • 1970-01-01
    • 2014-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多