2011-09-14 7 views
0

나는 다소 자바를 처음 접했고 누군가 나를 도울 수 있기를 바랬다. 나는 어디에서나 보았지만 해결책을 찾는 것처럼 보이지 않습니다. 메서드의 결과를 bufferedwriter를 사용하여 파일에 저장하려고합니다. bufferedwriter 자체는 다른 문자열을 저장하는 방식으로 작동하지만이 함수는 'null'만 표시합니다. 이 메서드의 결과가 둘 이상의 문자열을 반환하기 때문입니까? 어떻게 해결할 수 있습니까?Bufferedwriter가 파일에 * 모든 것을 저장하지 않음

의 BufferedWriter 코드 :

public static boolean saveStringToFile (String fileName, String saveString) 
{ 
    boolean saved = false; 
    BufferedWriter bw = null; 
    try 
    { 
    bw = new BufferedWriter(new FileWriter(fileName)); 
    try 
    { 
      bw.write(saveString); 
      saved = true; 
    } 
    finally 
    { 
      bw.close(); 
    } 

    } 
    catch (IOException ex) 
    { 
     ex.printStackTrace(); 
    } 
    return saved; 
} 

기능 자체 : BufferedWriter의

public static void generateNetReport() 
{ 
    saveStringToFile("Net.txt","here is the thing.." + "\n" + netDetails); 
} 
을 사용하여 파일에

public static void getNetDetails() 
{ 
    try { 
     Process net = Runtime.getRuntime().exec("lsof -i -n -P"); 
     BufferedReader netInput = new BufferedReader(
       new InputStreamReader(net.getInputStream())); 
    while ((netDetails = netInput.readLine()) !=null) 
    { 
     System.out.println(netDetails); 
     System.out.println("\n"); 
    } 

     } 
     catch(IOException e) { 
       System.out.println("exception happened - here are the details: "); 
       e.printStackTrace(); 

      } 
} 

저장 기능 내 코드는 다음과 같습니다

누군가가 netDetails를 파일에 저장하는 방법에 대해 도움을받을 수 있습니까? (. 편집)

+0

코드가 누락 된 것 같습니다. 'generateNetReport'와'saveStringToFile'을 어디에서 호출할까요? – cdeszaq

+0

saveStringToFile은 버퍼링 된 작성자 코드의 이름이며 generateNetReport가 main 함수에 만들어집니다. 위에 제공된 코드는 원래 클래스의 스 니펫 일뿐입니다. – Sham

답변

3

이것은 getNetDetails()의 문제입니다 : 예외가 아니라면 즉

while ((netDetails = netInput.readLine()) !=null) 

, 방법은 항상는 널 (null)로 netDetails을 떠날 것이다.

getNetDetails() 문자열을 반환하는 대신 변수를 설정하고 그것을 같은 것을해야한다, 파일의 마지막 행을 반환하는 의미가있어 가정하면 그것은 더 나은 것 :

String line = null; 
String nextLine; 
while ((nextLine = netInput.readLine()) != null) { 
    line = nextLine; 
} 
return line; 

을 당신도 해야 마지막으로 블록에서 InputStreamReader을 닫고 거의 확실하게 이 아니라을 삼키십시오.

+0

하지만'getNetDetails()'는 void로 정의됩니다 ... 컴파일 에러가 아니겠습니까? – amit

+0

@amit - getNDetDetails()는 전역 변수에 덤핑하는 대신 값을 반환합니다. – cdeszaq

+0

죄송합니다. netDetails를 의미했으며 정적 문자열입니다. 파일에 저장되지만 netDetails가 아닌 다른 정적 문자열이 있는데 그 이유를 알지 못합니다. – Sham

관련 문제