获取正在运行的Java文件的当前路径

6

我正在尝试编写一个简单的TCP客户端/服务器应用程序,用于复制文件。我希望服务器列出客户端可以复制的文件。目前我的代码如下:

import java.io.*;
public class GetFileList
{
    public static void main(String args[]) throws IOException{
        File file = new File(".");  
        File[] files = file.listFiles();  
        System.out.println("Current dir : " + file.getCanonicalPath());
        for (int fileInList = 0; fileInList < files.length; fileInList++)  
        {  
            System.out.println(files[fileInList].toString());  
        }
    }
}

输出:

Current dir : C:\Users\XXXXX\Documents\NetBeansProjects\Test
.\build
.\build.xml
.\manifest.mf
.\nbproject
.\src
.\UsersXXXXXDocumentsNetBeansProjectsTestsrcfile2.txt

我的问题是它给我的是父目录而不是当前目录。我的 GetFileList.java 位于 C:\Users\XXXXX\Documents\NetBeansProjects\Test\src,但显示的是 C:\Users\Alick\Documents\NetBeansProjects\Test。有谁可以帮助我解决这个问题吗?


地球上的终端用户为什么想上传位于应用程序自己目录中的文件?!?向他们提供JFileChooser(默认为user.home),让他们从那里开始。另外,不要太吝啬代码缩进,并使用逻辑和一致的系统。 - Andrew Thompson
2个回答

4
代码运行正确。它不给出源文件的位置,而是给出程序运行的当前目录。 我认为你正在从IDE运行程序,因此在这种情况下,当前目录是项目的根目录。 您可以通过调用 new File(“src”).listFiles()列出项目的src目录,但我不认为您真正需要这个:当您编译和打包程序时,源代码和源目录无论如何都不可用。 如果您希望能够向用户显示一些目录结构,则应将根目录作为参数传递给程序。例如,您应按以下方式运行程序: java -cp YOUR-CLASSPATH MyClass c:/root 因此,c:\ root下的所有文件都将可用。

哦,我明白了问题所在。我在命令提示符上运行它是正确的。感谢您的解释! - Dan

0

不要使用File file = new File(".");这样的相对路径,而应该使用绝对路径。你不能依赖于用户从特定目录启动程序。

如果你想让Netbeans从特定目录启动你的程序,你可以在项目属性 -> 运行中指定工作目录。


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