2011-01-29 60 views
1

美好的一天!Java。文件和文件夾。無法定義類型

我用Java編寫了這個方法,它必須搜索文件夾中的文件並對它們進行一些操作。

所以問題是,當我試圖檢查我有什麼(文件或目錄),我在兩種情況下都收不到任何東西!但正如我所看到的路徑看起來正確。

我該如何解決這個問題?

下面是代碼:

public void searchInDir(){ 

    File inputFile = new File(this.fileName);   
    String[] namesOfFilesDir = inputFile.list(); 

    for (int i = 0; i < namesOfFilesDir.length; i++) 
    { 
     String normalPath = this.getNormalPath(inputFile.getCanonicalPath()); //C:\User -> C:\\User 
     // Two separators for correcting path to file 
     String pathToCurrentFile = normalPath + File.separator + File.separator + namesOfFilesDir[i]; 

     File f = new File(pathToCurrentFile, namesOfFilesDir[i]); 


     System.out.printf("FileName=%s, Path=[%s]\n", namesOfFilesDir[i], pathToCurrentFile); 
     System.out.println(f.isDirectory());//False 
     System.out.println(f.isFile());//False too   
     //Some other code   
    } 
} 

例如this.fileName由路徑到文件夾(以及該文件夾包括一個文件夾和2個文件)。

下一個我:

FileName=Readme.txt, Path=[C:\\workspace\\Grep\\t\\Readme.txt] 
    false 
    false 
    FileName=t2, Path=[C:\\workspace\\Grep\\t\\t2] 
    false 
    false 
    FileName=test.txt, Path=[C:\\workspace\\Grep\\t\\test.txt] 
    false 
    false 

確定。節目說。

讓我們以打印下一個代碼爲例。

File f = new File("C:\\workspace\\Grep\\t\\Readme.txt"); 
System.out.println(f.isFile()); 

程序將打印「True」。

+0

不知道你想要什麼來完成,但爲什麼不使用File.listFiles(),它爲您提供了正確的文件對象 – 2011-01-29 19:43:33

+0

它是獲取文件夾中的所有文件並在其中查找信息的方法的一部分。所以它使用遞歸。這就是爲什麼我需要知道一種文件。 但我只是初學者,現在我明白這是非常糟糕的代碼。 – ExiRe 2011-01-29 20:03:19

回答

2

這部分是沒有意義的:

String pathToCurrentFile = normalPath + File.separator + File.separator + namesOfFilesDir[i]; 
    File f = new File(pathToCurrentFile, namesOfFilesDir[i]); 

即使我們忘記了暫時的雙隔膜,它是沒有意義的,加入namesOfFilesDir[i]首先構建的文件名,然後構造一個文件()對象使用雙參數構造函數,它基本上再次增加namesOfFilesDir[i]。嘗試打印f.getAbsolutePath(),你會明白我的意思。它應該可能是這樣的:

File f = new File(normalPath, namesOfFilesDir[i]); 
1

可能文件不存在,所以它既不是文件也不是目錄。嘗試打印f.exists()的輸出。

您是否注意到路徑中的重複文件分隔符?

+0

我寫了2個File.separator,因爲我應該有正確的文件路徑。我想和他們一起工作! – ExiRe 2011-01-29 19:08:02

+0

對不起,但我不明白你的意思。我認爲你需要重新審視你的邏輯 - 首先檢查你的文件是否是一個目錄,只要它是一個使用`list()`方法的目錄。在任何情況下,您都不應該使用兩個連續的文件分隔符 – Yoni 2011-01-29 19:16:28

1

我認爲也許你的路徑不正確。如果文件/目錄實際存在,則isFile()isDirectory()均返回true。您是否嘗試過在檔案上撥打exists()?此外,我懷疑你的getNormalPath()方法正在做什麼 - 我認爲它可能會改變文件名。

1

1st System.out.println是誤導!
輸出f的路徑會更好。

無論如何,根據輸出:

文件名=包含Readme.txt,路徑= [C:\工作空間\ grep的\噸\的Readme.txt]

fC:\workspace\Grep\t\Readme.txt\Readme.txt 那是namesOfFilesDir[i]正在追加兩次!

它會更容易/最好只用File直接實例工作:

相關問題