2016-04-11 13 views
0

Temel olarak, bir dosya konumuna gidiyorum, onun .txt olup olmadığını kontrol ediyorum. Eğer öyleyse o dosyadan okurum. Eğer yinelemeli olmak zorunda olduğumdan bir dizinse ve eğer birebir doğruysa o zaman ben de onları yinelemedim. Şu anda dosyaları listelemeye çalışıyorum. ama "uyumsuz türleri" almaya devam ediyorum: java.io.File [] javo.io.File dosyasına dönüştürülemez, ancak Dosya parametresi aracılığıyla bir dosya veya dizin iletmek zorunda olduğum sürece başka bir şekilde düşünemiyorum toplamak. Sorunun tam olarak ne sorduğunu bile anlayamadığımdan emin değilim. İşte Bir dosyadan ayrıştırıldıktan sonra bir dizinde yinelemeli olarak yinelemeli miyim? (Java)

soru şudur:

dosya adı uzantısı .txt ile biter, yöntem anda metin tek satır olarak içeriğini okumalısınız bir tek dosya önceki extractIntegers yöntemine Her satırı geçen ise . Adları .txt ile bitmeyen bireysel dosyalar basitçe yok sayılmalıdır. Dosya bir dizin ise, yöntem kendi içindeki her dosya ve dizin için kendini tekrarlı olarak çağırmalıdır. Parametre ayrıntılı olarak true değerine ayarlanırsa, yöntem ayrıca, işlediği her dosya ve dizinin adını da vermelidir.

public static void collect(File file, Set<Integer> found, boolean verbose) 
{ 
    String fileName = file.getName(); 
    String extension = fileName.substring(fileName.lastIndexOf(".") + 1, fileName.length()); 
    String fileLine = ""; 
    BufferedReader reader; 
    try{ 
     reader = new BufferedReader(new FileReader(file)); 
     if(extension.equals("txt")) 
     { 
      while((fileLine = reader.readLine()) != null) 
      { 
       extractIntegers(fileLine, found); 
      } 
     } 
     else if(file.isDirectory()) 
     { 
      if(verbose = true) 
      { 
       System.out.println("Directory: " + file.getName()); 
       collect(file.listFiles(), found, true); 
      } 
      else 
      { 
       collect(file.listFiles(), found, false); 
      } 
     } 
    } 
    catch(IOException e) 
    { 
     System.out.print("file/directory not found"); 
    } 
} 
+0

Her zaman .txt dosyalarını filtrelemek için 'SimpleFileVisitor' ve' DirectoryStream' kullanmış olurdum. İşte bir [örnek] (https://docs.oracle.com/javase/tutorial/essential/io/walk.html) – Prashant

+0

Bunun bir tekrar soru olduğunu varsayalım. Http://stackoverflow.com/questions/20987214/recursively-list-all-files-within-a-directory-using-nio-file-directorystream –

cevap

0

file.listFiles() dosyaların dizisi döndürür. Eğer collect() yönteme bunları tek tek geçmek zorunda:

... 
else if(file.isDirectory()) { 
    if (verbose) 
    System.out.println("Directory: " + file.getName()); 
    for (File f : file.listFiles()) 
    collect(f, found, verbose); 
} 
... 
0

Sen dosyaların bir dizi döndürür bir argüman file.listFiles() ile toplamak çağrıda bulunuyorlar. Yapmak istediğinizi düşündüğüm şey, dosya dizinizdeki her dosya için bir kez toplanmasıdır. Bu değiştirme

Dene: bununla

collect(file.listFiles(), found, true); 

:

for (File subFile : file.listFiles()) { 
collect(file.listFiles(), found, true); 
} 

bunu yapmaya. Hata kodunu, kaynak kodunuzda görünen her ikisini de değiştirdiğinizden emin olun. İşe yaramıyorsa haber ver - Daha fazla araştırma yapacağım.

+0

adresine bakın, sözdizimsel olarak çalışır, ancak bazı nedenlerle bir dizin olup olmadığını kontrol etmek, bir IOException her zaman yakalanır. Ayrıca –

+0

@kyletruong no problem yardım için teşekkür ederiz. Cevabım size yardımcı olsaydı, cevap verdiyseniz veya cevap olarak kabul ederseniz havalı olurdu. – nhouser9