假设我有以下代码:
String fileName = "name.txt";
FileOutputStream fileOut = new FileOutputStream(fileName);
wb.write(fileOut);
这样,文件将在项目的bin文件夹下创建。
但是,如果我在整个路径上具体使用fileName:
String fileName = "c:/temp/name.txt";
此文件将在c:\ temp文件夹中创建。
是正确的吗?为什么会发生这种情况,FileOutputStream如何工作?
答案 0 :(得分:2)
如果您没有指定绝对路径,例如如果你只指定文件名,那么你的程序或操作系统需要弄清楚,在哪里找到该文件。因此,正在运行的程序始终具有工作目录。默认情况下,这恰好是您启动它的文件夹。
答案 1 :(得分:2)
这不是关于FileOutputStream
如何工作,而是关于操作系统启动时分配给进程的路径
此路径称为current working directory。从该目录中计算所有relative paths
。简单文件名是相对路径(到当前工作目录)。
如果指定absolute path
,则此路径用于创建文件。
您可以在this wiki page上阅读有关路径的更多信息。
答案 2 :(得分:1)
除非指定绝对路径,否则路径相对于当前工作目录。
如果您当前的工作目录是项目中的bin文件夹,则会在那里创建。
答案 3 :(得分:1)
如果只指定文件名,则会在当前工作目录中创建。如果确实指定了绝对路径,那么它当然会在该路径上创建。
答案 4 :(得分:0)
所有关于相对和绝对目录。假设您指定了路径foo/bar
。它将在您的工作文件夹的bar
目录中创建一个文件foo
。同样适用于../foo/bar
它将在工作目录上方的文件夹中的bar
目录中创建foo
文件。但是,如果您键入C:\\Documents\ and\ Settings\User\Desktop\bar
(或/home/user/Desktop/bar
),则会在桌面上创建bar
。有关详细信息,请查看here。