2013-03-18 2 views
1

Я создал программу для отображения всех файлов и подкаталогов, представленных в каталоге, причем имя каталога передается в качестве аргумента из командной строки в cmd.
Первый если Условие (if (f.isDirectory())) проверяя, является ли данный аргумент каталогом или не работает нормально.
Затем я использую метод File.list(), который равен dir_content = f.list(), чтобы сохранить список всех имен файлов в каталоге в массиве String dir_content.
Затем в цикле for каждый раз, когда создается новый файловый объект для каждого имени файла, хранящегося в массиве String dir_content, который равен Файл f1 = новый файл (dir_content [i]), а затем проверить наличие файла используя метод exists(), который равен if (f1.exists()).
Теперь проблема в том, что f1.exists возвращает false для многих файлов, несмотря на их существование в данной директории. Он отображает несколько файлов, кроме того, не отображает подкаталоги.
Ниже приведен код моей программы: -Метод file.exists() возвращает false, даже если файл существует

import java.io.File; 
class FileDemo1 
{ 
public static void main(String[] a) 
{ 
    File f = new File(a[0]); 
    String[] dir_content; 

    if(f.isDirectory()) 
    { 
    System.out.print(f.getName()+" is a directory containing "); 
    dir_content = f.list(); 

    for(int i=0;i<dir_content.length;i++) 
    { 
     File f1 = new File(dir_content[i]); 
     if(f1.exists()) 
     { 
     System.out.print("\n\t: "+f1.getName()); 
     System.out.print(" "+f1.isFile()); 
     System.out.print(" "+f1.isDirectory()); 
     } 
    } 

    } 
} 
} 

Кто-то пожалуйста, скажите мне причину этой проблемы и ее решения.
Спасибо заранее.

+0

'dir_content = Ф.Листа()' Если приложение. имеет дело с 'File' instancess, не p * ss с экземплярами' String'. См. ['File.listFiles()'] (http://docs.oracle.com/javase/7/docs/api/java/io/File.html#listFiles%28%29). –

ответ

2

Ваша логика правильная, но File.list не делает то, что вы думаете. Это returs список имен файлов, а не их полный путь, так что вам нужно сделать что-то вроде:

File f1 = new File(f,dir_content[i]); 

правильно создать путь к файлу (ваш хотите файл «FILE1.TXT» внутри данной директории) ,

+0

См. Также ['File.listFiles()'] (http://docs.oracle.com/javase/7/docs/api/java/io/File.html#listFiles%28%29). –

+0

Да, он работает. Спасибо. – user2181750

0

dir_content [i] будет иметь только имя каталога, поэтому, когда вы создадите объект File, у него будет только имя каталога, а не весь путь. Поэтому вы получаете ложь.

Так что если вы делаете что-то вроде этого он должен дать вам верно:

File f1 = new File(f.getPath() + dir_content[i]); ///f being a directory 
Смежные вопросы