2012-02-05 125 views
5

我正在嘗試編寫一個簡單的tcp客戶機/服務器應用程序來複制文件。我想要服務器列出客戶端可以複製的文件。到目前爲止我的代碼是這樣的:獲取正在運行的java文件的當前路徑

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任何人都可以幫我解決這個問題嗎?

+0

到底爲什麼最終用戶要上傳的應用程序自己的文件目錄?!?爲他們提供'JFileChooser' (默認爲'user.home'),讓他們從那裏拿走它。順便說一句 - 請不要因代碼縮進而吝嗇,並使用合乎邏輯的一致系統。 – 2012-02-05 10:29:52

回答

3

該代碼正常工作。它不會給你的源文件的位置。它爲您提供程序運行的當前目錄。

我相信你是從IDE運行程序,所以在這種情況下當前目錄是你的項目的根目錄。

你可以通過調用new File("src").listFiles()來列出你的項目src目錄,但我不認爲你真的需要這樣做:當你編譯和打包你的程序時,source和source目錄不可用。

我認爲如果你希望能夠向你的用戶顯示一些目錄結構,你的程序應該獲取根目錄作爲參數。例如,您應該運行您的程序作爲

java -cp YOUR-CLASSPATH MyClass c:/root

所以,c:\root下的所有文件都可用。

+0

O我看到了問題。我在cmd上運行它,它是正確的。感謝您的解釋! – Dan 2012-02-05 10:36:12

0

而不是 File file = new File(「。」); 使用絕對路徑。你不能依賴於來自特定目錄的用戶啓動程序。

如果你想Netbeans的推出從特定目錄中的程序,你可以指定目錄中的項目屬性工作目錄 - >運行

相關問題