使用Java创建一个新目录并在其中创建一个文件

12

我正在尝试创建一个新目录和该目录下的文件。请问,我哪里做错了吗?

我使用的是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的基础知识。如果您阅读http://docs.oracle.com/javase/tutorial/essential/io/fileOps.html上有关基本Java的文档,您就可以掌握它。 - AJJ
1
@Rock123 刚开始学习 Java,想在这里问一下,你能指点我更好的资源吗? - WannaBeCoder
2个回答

32

基本上,正在发生的是您正在创建一个名为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上无法运行。 - abhishek ringsia
基本原则应该是有效的,假设您具有编写权限以创建目录/文件,我在MacOS和Unix系统上使用相同的技术,它可以正常工作。 - MadProgrammer

4

为了在项目中创建一个新目录,需要创建一个文件,然后在文件中写入内容:

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();
    } 

}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接