2013-11-20 2 views
0

Я пытаюсь передать аргумент методу. Аргумент может быть файлом или директором.Как узнать, является ли agument каталогом или файлом в Java

public class ReadCsv { 

    String line = null; 
    BufferedReader br ; 

    public void readCsv(String arg) throws Exception{ 

     File file = new File(arg); 
     if(file.isDirectory()){ 
     for(File dir : file.listFiles()){ 

       System.out.println(file.getName()); 
       reader(dir); 
      } 
     } 
     else{ 
       reader(file); 

      } 
     } 

    public void reader(File file) throws Exception { 
     br = new BufferedReader(new FileReader(file)); 
     while((line=br.readLine())!=null){ 
      //Code 
    } 
} 

Но код не работает, как я хочу. Когда я передаю аргумент arg, я должен определить, является ли это файлом или каталогом и работает в соответствии с ним. Кто-нибудь может помочь мне определить файл или каталог. Этот мой код запускает цикл 4 раза, если arg является каталогом.

+0

Разве это не смешно, что у вас уже есть нужные функции (то есть File # isDirectory) в методе readCsv? – Ingo

+0

Ваш ARG DIR, чем, 1> Может быть, есть другой каталог под этим DIR 2> вы уверены, что в DIR (if is directory) все файлы. Для первого случая я отправляю свой ответ. – HybrisFreelance

ответ

1

Ваш код выглядит отлично, похоже, что вы просто выводите каталог (который вы назвали «файл») вместо файла, который вы назвали «dir».

for(File dir : file.listFiles()) { 
    System.out.println(dir.getName()); //you were outputting file.getName() 
} 
+0

Также, как говорит ankit337, он не рекурсивный, поэтому он не имеет дело с вложенными каталогами. –

1

File имеет isDirectory() и isFile() методы, которые можно использовать для проверки типа.

1

См. File официальная документация. Есть такие методы, как:

isFile(); 
isDirectory(); 
1

попробовать .. распечатать все каталоги и имя файла.

IF вложенных каталогов:

public class ReadCsv { 

    String line = null; 
    BufferedReader br ; 

    public void readCsv(String arg) throws Exception{ 

     File file = new File(arg); 
     checkIsDir(file); 
    } 

    public void checkIsDir(File file) throws Exception { 

     if(file.isDirectory()){ 

      System.out.println("Directory : "file.getName()); 
      for(File dir : file.listFiles()){ 
        checkIsDir(dir); 
      } 
     } 
     else{ 
       System.out.println("File : "file.getName()); 
       reader(file);  
      } 
    } 

    public void reader(File file) throws Exception { 
     br = new BufferedReader(new FileReader(file)); 
     while((line=br.readLine())!=null){ 
      //Code 
    } 
} 
+0

Это улучшение кода (для включения вложенных каталогов), которое позволяет исправить эту ошибку (выводя имя каталога несколько раз) без объяснения причин. Так что не совсем ответ. –

+0

'@ Ross..' Я уже сделал комментарий по вопросу, который используется для вложенных каталогов. Также здесь сделайте некоторое редактирование здесь. благодаря – HybrisFreelance

Смежные вопросы