Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java:如何在Mac OS X中创建新文件夹_Java_Macos_Directory - Fatal编程技术网

Java:如何在Mac OS X中创建新文件夹

Java:如何在Mac OS X中创建新文件夹,java,macos,directory,Java,Macos,Directory,我想在Mac OS X的“我的桌面”中创建一个文件夹 我尝试使用这段代码,当然,我的名字是Mymac:) 你知道我如何创建一个新文件夹吗? 另一件事是,当我想在我的代码所在的目录中创建一个文件夹时,你知道我怎么写吗?我试过了 String path="./"; String path="::MyVolume"; String path="."; 使用file.mkdir()或file.mkdirs()代替file.createNewFile(),如果您有创建新文件夹和文件

我想在Mac OS X的“我的桌面”中创建一个文件夹

我尝试使用这段代码,当然,我的名字是Mymac:)

你知道我如何创建一个新文件夹吗? 另一件事是,当我想在我的代码所在的目录中创建一个文件夹时,你知道我怎么写吗?我试过了

   String path="./";

   String path="::MyVolume";

   String path=".";
使用
file.mkdir()
file.mkdirs()
代替
file.createNewFile()
,如果您有创建新文件夹和文件的权限,它应该可以工作

mkdirs()
将创建子文件夹,如果它们不存在,
mkdir()
将不存在

要在基本目录(启动应用程序的目录)中创建目录,只需提供一个相对路径名:
newfile(“mydir”).mkdir()


编辑:为了使文件处理更容易,我建议您也看看ApacheCommons和

独立于平台的方式:

File rootDir = File.listRoots()[0];
File dir = new File(new File(new File(rootDir, "Users"), "Mymac"), "Desktop");
if (!dir.exists()){
    dir.mkdirs();
}

您的代码正常,可以工作。也许您的文件路径(“Mymac”)中的用户名有输入错误,因此您看不到更改,因为更改会转到另一个文件夹

在我的机器上运行此代码可以很好地工作,并给出预期的结果

要使代码平台独立,可以使用以下技巧构建文件路径:

File path = new File(File.listRoots()[0], "Users" + System.getProperty("file.separator") + "Mymac" + System.getProperty("file.separator") + "Desktop"));

如果“My_home”应该是文件夹而不是文件,则必须更改
file.createNewFile()
-命令。您可以在Thomas的答案中找到更详细的信息。

要找到您的类所在的文件夹/目录(假设它们不在Jar中),然后在那里创建子文件夹:

    String resource = MyClass.class.getName().replace(".", File.separator) + ".class";      
    URL fileURL = ClassLoader.getSystemClassLoader().getResource(resource);

    String path = new File(fileURL.toURI()).getParent();
    String mySubFolder = "subFolder";
    File newDir = new File(path + File.separator + mySubFolder);
    boolean success = newDir.mkdir();

(上面的代码可以更加紧凑,我更详细地列出了它以演示所有步骤。)当然,您需要关注权限问题。确保运行java的用户具有创建新文件夹的权限。

运行此代码时会发生什么?线程“main”java.lang.SecurityException中的异常:密封冲突:包javax.media.j3d在添加此代码之前运行的my main方法中被密封。然后,您导入了错误的库,或者代码的另一部分出错。这段代码毫无例外地运行(请看我的答案),我将尝试它,并告诉您结果:)这实际上不会创建目录。
文件
对象只是路径名的表示-创建
文件
对象并不同时在磁盘上创建文件或目录。我想OP已经知道这一点(当然,我也知道;-),因为问题中显示的代码已经使用了“File.mkdirs()”。它只是帮助使用特定于平台的文件路径分隔符和根目录。实际上,我认为它以前更可读。我把它换回来;-)我不同意这一点:创建几个不必要的对象来防止可能的程序员输入错误不是“最佳实践”。请注意,自从Java SE 7以来,现在有了NIO.2文件API,它提供Path.get和FileSystem.getDafault().getRootDirectory()。与旧的java.io.File类相比,使用NIO.2文件API应该更受欢迎,当时我在回答中建议使用旧的java.io.File类。这也解决了创建几个文件对象的问题。我没有否决你的答案,但我可以想象为什么:他正在使用mkdirs首先创建文件夹。@Erik,我想他想创建一个文件夹
My_home
,至少这是帖子的意思。关于创建一个文件,没有提到什么。这是真的——这样你也可以理解他的请求+但是,代码会在
/Users/Mymac/Desktop
中创建一个文件
My_home
,而不是一个文件夹。虽然路径是相对的。但是,正如您所提到的(例如Windows“c:”),这不是独立于平台的,我想我必须导入javax.print.DocFlavor.URL;对吗?@dimitricha:您需要添加:
import java.net.URL
    String resource = MyClass.class.getName().replace(".", File.separator) + ".class";      
    URL fileURL = ClassLoader.getSystemClassLoader().getResource(resource);

    String path = new File(fileURL.toURI()).getParent();
    String mySubFolder = "subFolder";
    File newDir = new File(path + File.separator + mySubFolder);
    boolean success = newDir.mkdir();