4

假设我有以下代码:

String fileName = "name.txt";
FileOutputStream fileOut = new FileOutputStream(fileName);
wb.write(fileOut);

这样,文件将在项目的 bin 文件夹下创建。

但是,如果我在整个路径中指定文件名:

String fileName = "c:/temp/name.txt";

该文件将在 c:\temp 文件夹中创建。

正确吗?为什么会发生这种情况,FileOutputStream 是如何工作的?

4

5 回答 5

2

这不是关于如何FileOutputStream工作,而是关于操作系统在启动进程时分配给进程的路径

此路径称为当前工作目录。从该目录relative paths中计算所有内容。一个简单的文件名是一个相对路径(到当前工作目录)。

如果您指定 an,absolute path则此路径用于创建文件。

您可以在此 wiki 页面上阅读有关路径的更多信息。

于 2013-05-09T19:34:48.177 回答
2

除非您指定绝对路径,否则该路径是相对于当前工作目录的。

如果您当前的工作目录是项目中的 bin 文件夹,它将在那里创建。

于 2013-05-09T19:27:28.420 回答
2

如果您没有指定绝对路径,例如,如果您只指定文件名,那么您的程序或操作系统需要以某种方式找出该文件的位置。出于这个原因,一个正在运行的程序总是有一个工作目录。默认情况下,这恰好是您启动它的文件夹。

于 2013-05-09T19:28:38.763 回答
1

如果只指定文件名,它将在当前工作目录中创建。如果您确实指定了绝对路径,它当然会在该路径上创建。

于 2013-05-09T19:28:07.643 回答
0

这都是关于相对和绝对目录的。假设您指定了 path foo/bar。它将在您的工作文件夹bar的目录中创建一个文件。foo这同样适用于../foo/bar它将在工作目录上方的文件夹bar中的目录中创建一个文件。foo但是,如果您键入C:\\Documents\ and\ Settings\User\Desktop\bar(或/home/user/Desktop/bar),它将bar在您的桌面上创建一个。欲了解更多信息,请查看此处

于 2013-05-09T19:32:12.997 回答