2013-02-06 22 views
1

我已經看過Java查找文件的其他線程,但我仍然發現自己感到困惑。Java文本文件I/O位置

我有一個程序,在Eclipse(Juno)中創建爲Java項目。我沒有做任何修改,現在只有一個主要的課程。

當程序運行時,它需要三個輸入:一個數字和兩個字符串。第一個字符串是它必須從中讀取輸入的文件的名稱,第二個字符串是要輸出到的文件。

如果我爲輸入字符串傳入「input.txt」,並且有一個名爲input.txt的文件,那麼Java應該在哪裏找到它?我曾嘗試將其放入src,bin和項目根目錄中。目前,我試圖訪問該文件,如下所示:

File input = new File(args[1]); 

凡ARGS [1]在開始時傳遞給程序的第一個字符串。當我這樣做,我得到一個錯誤「java.io.FileNotFoundException:input.txt(系統找不到指定的文件)」

我應該在哪裏放置文件,以便Java可以找到它?

下面是相關代碼:

public class main { 

public static int runs; 
public static File input; 
public static File output; 

public static String line1; 
public static String line2; 
public static String line3; 
public static String reactions; 

/** 
* @param args 
*/ 
public static void main(String[] args){ 

    if(args.length != 3) 
     System.out.println("Please provide 3 arguments."); 

    runs = Integer.parseInt(args[0]); 
    File input = new File(args[1]); 
    File output = new File(args[2]); 

    System.out.println(runs); 
    System.out.println(input); 


    try { 
     Scanner sc = new Scanner(input); 

回答

1

你只需把該輸入文件在項目的根文件夾。

UPDATE:

當您正在使用掃描儀來獲取用戶輸入。然後隱藏你正在使用的代碼,即命令行參數。

Scanner sc = new Scanner(input); 
runs = sc.nextInt(); // This will store your input line 
in = sc.next(); // This will store your input file name 
out = sc.next(); // This will store your output file name 
+0

它目前在項目的根文件夾中,並且不起作用。 – elykl33t

+0

@ elykl33t你確定你將我們的文件保存在根文件夾中嗎?它應該工作。嘗試'。/'附加到你的文件。但它沒有任何區別。 – Smit

+0

是的,我已經雙重檢查它是否在正確的目錄中。不知道它是否重要,但實際上造成我的錯誤是'Scanner sc = new Scanner(input);' – elykl33t

0

如果文件名不是絕對的(不/在* nix和C:\在Windows啓動),則看着當前工作目錄。 Java程序可能使用System.getProperty ("user.dir")獲取其當前工作目錄。

0

在Eclipse中,您應該明確設置運行配置的執行目錄。

使用默認可以取決於項目配置,包裝,輸出目錄等,所以最好的目錄或者(a)使用絕對路徑(例如,開頭用c:\/等)或( b)在運行配置中設置它。

2

對於這樣的問題,請嘗試使用getAbsolutePath()方法:

File input = new File(args[1]); 
System.out.println(input.getAbsolutePath()); 

這說明你所在的文件對象認爲該文件。這就是你應該放置文件的地方......或者可能相應地修改輸入參數,以便程序在文件所在的位置查找文件。

+0

完成此操作後,打印的目錄與文件的目錄相同。 AKA文件是程序認爲它的地方。 實際發生錯誤的行是 'Scanner sc = new Scanner(input);' – elykl33t

+0

您是否傳入文件名或目錄名? println顯示什麼? –

+0

這是我的相關代碼: 'File input = new File(args [1]); 掃描儀sc =新掃描儀(輸入);' – elykl33t