2012-09-08 7 views
0

다음 방법을 사용하여 파일에서 내용을 읽습니다. 여기서 문제는 inputBuffer (이 경우 1024)으로 지정된 문자의 소수 자리로 제한된다는 것입니다.Android. 파일에서 내용 읽기

우선, 내용이 1024 자보다 짧으면 많은 공백 문자가 생기며이를 제거하려면 trim을 사용해야합니다.

둘째로,이 파일이 1024 자 이상이고 String 개체에 삽입되어 있어도이 파일의 전체 내용을 읽는 것이 더 중요합니다. 정확하지 않거나 그런 것이 아니기 때문에 파일에 더 많은 데이터가 있는지 확인하기 위해 .available 메서드를 사용하면 안된다는 것을 이해했습니다.

내가 어떻게해야하는지에 대한 아이디어가 있습니까?

public String getContent(String sFileName) 
{ 
    //Stop in case the file does not exists 
    if (!this.exists(sFileName)) 
     return null; 

    FileInputStream fIn = null; 

    InputStreamReader isr = null; 

    String data = null; 

    try{ 

     char[] inputBuffer = new char[1024]; 

     fIn = _context.openFileInput(sFileName); 

     isr = new InputStreamReader(fIn); 

     isr.read(inputBuffer); 

     data = new String(inputBuffer); 

     isr.close(); 

     fIn.close(); 

    }catch(IOException e){ 

     e.printStackTrace(System.err); 
     return null; 

    } 

    return data.trim(); 
} 

답변

2

당신이 당신의 버퍼를 할당하기 전에 당신은 #/바이트를 읽을 수 있습니다

// Poor 
char[] inputBuffer = new char[1024]; 
fIn = _context.openFileInput(sFileName); 
isr = new InputStreamReader(fIn); 

// Better 
long nbytes = new File(sFileName).length(); 
char[] inputBuffer new char[nbytes]; 
isr = new InputStreamReader (
    _context.openFileInput (sFileName)); 

또 다른 해결책은 문자열로 입력, 한 번에 한 줄을 읽어하는 것입니다.

+0

흠. 세상에 내가 어떻게 생각하지 않았는가? 그래, 너 거기에 뭔가있어. – AndreiBogdan

+0

이 솔루션이 줄 단위로 읽는 것보다 나을 수있는 이유는 무엇입니까? 아니면 어떤 방법으로 좋을까요? – AndreiBogdan

+0

흠, 버퍼를 할당 할 때 새로운 char [long], char [int] 만 허용하지 않는 것 같습니다. 글쎄, 그거 안좋아. ( – AndreiBogdan