2013-03-11 28 views
1

在我的程序中,我使用函數FileReader(String fileName)來讀取文件。這個文件保存在fileName持有一個字符串setup.ini。我把這個文件保存在我編譯我的java程序的同一個文件夾中,但是即使在我從這個文件夾中刪除文件後,我也沒有找到任何未找到的文件異常。所以我想知道編譯器是否從其他位置獲取文件?在java中,當我們使用函數'FileReader(String fileName)'時,我們應該在哪裏保存文件fileName?

請參閱下面的代碼:

public class ReadINI 
{ 
    public static void main(String args[]) throws IOException 
    { 
     String s = getParameter("bin","setup.ini"); 
     System.out.println("Result " + s); 
    } 

    public static String getParameter(String inputValue, String fileName) 
    { 
     try 
     { 
      BufferedReader myInput = new BufferedReader(new FileReader(fileName)); 
      try 
      { 

       try { 
         String fileLine; 
         fileLine = myInput.readLine(); 

         do 
         { 
          String stringArray[] = fileLine.split("="); 
          if (inputValue.equals(stringArray[0])) 
          return stringArray[1]; 
         }while ((fileLine = myInput.readLine()) != null); 
        } 
        catch (Exception e) 
        { 
         System.err.println("Error1: " + e); 
        } 
      } // end try 
      catch (Exception e) 
      { 
       System.err.println("Error2: " + e); 
      } 

     } // end try 
     catch (Exception e) 
     { 
      System.err.println("failed to open file setup.ini"); 
      System.err.println("Error3: " + e); 
     } 
     return "Not Found"; 
    } 

} 
+0

無論你把文件放到你的項目中,它的相對路徑都必須在那裏給出。 – SudoRahul 2013-03-11 08:29:50

+1

如果我沒有提及文件名以外的任何內容,它不應該在正在編譯該程序的相同目錄中搜索該文件? – Manas 2013-03-11 08:31:42

+2

你在哪裏運行你的程序?那裏應該有一個setup.ini文件。 – longhua 2013-03-11 08:32:27

回答

0
the file should be right inside your project outside src directory , 
    the file should be in the same folder where src folder is present 

    |--MyProject 
     |--src 
     |--youFile.txt 

or you can give full path to the file which is located anywhere on the disk 
String fileName = "c:/folder1/folder2/yourFile.txt"; 
1

編譯器不搜索您的文件的任何地方。該文件在運行時搜索,而不是在編譯時。如果你給出了一個相對路徑,該文件將在運行程序的目錄中被搜索到。

+0

我已經運行該程序,通過從保存我的程序的目錄中刪除setup.ini文件,並期望我的程序給出'找不到文件'的異常。但該計劃沒有給出任何例外。你能提出一些解決方案嗎? – Manas 2013-03-11 10:14:47

0

任何在java應用程序中打開文件的請求都會使JVM從該特定java類的CLASSPATH開始搜索。因此,當您將要打開的文件放在CLASSPATH的代碼中時 - 基本上是.java文件(因此也是編譯後的.class文件)所在的文件夾。詮,如果你的文件someFile.txt是由SomeClass訪問其居住在包org.pack1.pack2,那someFile.txt應該存在的文件夾中\org\pack1\pack2\

使用絕對路徑來訪問應用程序中的文件是不鼓勵,因爲它會削弱了該應用程序的可移植性。

+0

正如你在上面的代碼中看到的,我沒有使用任何絕對路徑。我剛剛在字符串中提到了文件名,它是'FileReader()'函數的參數。 – Manas 2013-03-11 10:18:58

相關問題