2013-05-06 4 views
2

디렉토리의 모든 하위 폴더를 나열하고 텍스트 파일에 기록해야합니다. 그러나 마지막 하위 폴더 만 코딩하면 파일에만 기록됩니다. 도움을 청하십시오. 나는 Java 초보자입니다.디렉토리의 모든 하위 폴더를 나열하고 텍스트 파일에 작성

public class Main { 
// private Object bufferedWriter; 

    /** 
    * Prints some data to a file using a BufferedWriter 
    */ 
    public void writeToFile(String filename) { 
     try 
     { 
     BufferedWriter bufferedWriter = null; 
     bufferedWriter = new BufferedWriter(new FileWriter(filename)); 


     int i=1; 
     File f=new File("D:/Moviezzz"); 
     File[] fi=f.listFiles(); 
     for(File fil:fi) 
     { 
      if(fil.isHidden()) 
      { 
       System.out.print(""); 
      }  
      else if(fil.isDirectory()||fil.isFile()) 
      { 
       int s=i++; 

       String files = fil.getName(); 



      //Start writing to the output stream 
      bufferedWriter.write(s+" "+fil); 
      bufferedWriter.newLine(); 

      // bufferedWriter.write(s+" "+files); 
      } 

     } 


      //Construct the BufferedWriter object 


    } catch (FileNotFoundException ex) { 
      ex.printStackTrace(); 
     }catch (IOException ex) { 
      ex.printStackTrace();} 

    } 


    public static void main(String[] args) { 
     new Main().writeToFile("d://my.txt"); 
    } 
} 
+1

루프 뒤에 'BufferedWriter'를 닫으십시오. –

+0

flush()를 수행 했습니까? 시도 해봐. – Ketan

+0

@AhmedKRAIEM, 맞습니다. –

답변

0

당신이 BufferWriter 클래스의 flush() 메소드를 호출 Uptil이 파일에 데이터를 기록하지 않습니다.

매번 루프 할 때마다 flush() 할 필요는 없습니다. 그러나 루프가 끝나면 다시 작성할 수 있습니다.

가장 중요한 것은 yourObj.flush()입니다. 버퍼 메모리를 깨끗하게 유지하는 것이 좋습니다. flush() 메서드를 호출 한 후 데이터가 메모리에서 해제되고 파일에 기록됩니다.

+0

새 파일이 추가 된 경우에도 디렉토리에있는 모든 폴더를 나열하는 방법, JAVA를 사용하여 Sql server2008 @ Pietu1998, @ Ketan으로 파일에 게시하는 방법 – Shan

0

루프 이후에 BufferedReader을 닫습니다.

for(File fil:fi) 
{ 
    ... 
} 
bufferedReader.close(); 

또한, 당신의 코드에서 이러한 변화가 더 읽기 쉽고 효율적으로하는 것이 좋습니다 :

BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(filename)); 
... 
if(!fil.isHidden() && (fil.isDirectory() || fil.isFile())) 
{ 
    ... 
} 

당신은 직접 BufferedReader을 만들 수 있습니다. 그런 다음 파일 이름을 가져 오는 중 아무 것도하지 않으므로 가져 오기를 제거하십시오. 그리고 마지막으로 을 if에 넣지 않아도 파일이 숨겨져 있는지 확인할 수 있습니다. 빈 문이나 코드를 사용하지 않거나 ! 연산자를 사용하여 반전시킬 수 있습니다.

if(fil.isHidden()) 
{ 
    ; // Do nothing 
} 
else 
{ 
    // Do something 
} 

if(fil.isHidden()); // Do nothing 
else 
{ 
    // Do something 
} 

if(!fil.isHidden) 
{ 
    // Do something 
} 
관련 문제