2014-03-12 3 views
0

텍스트 파일에 이름 목록을 쓰려고합니다. 한 번에 한 줄씩 씁니다. 필자는 파일 쓰기와 읽기를위한 수업을 가지고 있습니다.파일에 두 줄 이상 쓸 수 없습니다.

package com.example.mobiledayoff; 

import java.io.BufferedReader; 
import java.io.BufferedWriter; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.io.OutputStreamWriter; 
import java.util.ArrayList; 

import android.content.Context; 

public class userListIO { 

Context fileContext; 

public userListIO(Context fileContext){ 
    this.fileContext=fileContext; 
} 

public void writeItems(String fileName, String name){ 
    final String ls = System.getProperty("line.separator"); 
    BufferedWriter writer = null; 
    try{ 
     writer = 
      new BufferedWriter(new OutputStreamWriter(fileContext.getApplicationContext().openFileOutput(fileName, Context.MODE_PRIVATE))); 
     writer.write(name + ls); 
    } catch (Exception e){ 
     e.printStackTrace(); 
    } finally { 
     if (writer != null) { 
      try { 
       writer.close(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 
    } 
} 

public ArrayList<CharSequence> readItems(String filename){ 
    ArrayList<CharSequence> list = new ArrayList<CharSequence>(); 
    BufferedReader br = null; 
    try { 
     br = new BufferedReader(new InputStreamReader(fileContext.getApplicationContext().openFileInput(filename))); 
     String line; 

     while((line = br.readLine()) != null){ 
      list.add(line); 
     } 
    } catch (Exception e) { 
     e.printStackTrace(); 
     } finally { 
     if (br != null) { 
     try { 
      br.close(); 
     } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 
     } 

    return list; 
} 

}

I 파일에 대한 사용자의 입력 (글고)로부터 라인 물품이 클래스를 사용 여기 클래스이다. 그리고 나서 다른 EditText에서 파일의 내용을 표시하고 파일의 내용을 표시합니다. 여기에 내가 그것을 할 방법은 다음과 같습니다

public void addUser(View view){ 
    EditText text = new EditText(this); 
    text = (EditText)findViewById(R.id.add_user_text); 
    String name = text.getText().toString();   
    String filename = "userList.txt"; 

    userListIO messenger = new userListIO(this); 

    messenger.writeItems(filename, name); 

    text.setText(""); 

    ArrayList<CharSequence> list = messenger.readItems(filename); 

    EditText editText = (EditText) findViewById(R.id.debug_text); 

    String info = ""; 
    int count = 0; 
    for (CharSequence item: list){ 
     info += item.toString(); 
     count++; 
    } 

    info += "; there are " + count + " lines"; 

    editText.setText(info); 
} 

내 주요 문제는이 파일이 내가 그것으로 쓰기 때문에 항상 1 개 라인을 가지고 때마다 덮어 쓰기됩니다 것으로 보인다는 것이다. 이 문제를 해결하는 방법을 알고 계십니까? 수정하면 나는 이미 존재하는 경우 파일에 추가하는 방법 또는 존재하지 않는 경우 파일을 만드는 방법을 의미합니다.

또한 응용 프로그램을 닫았다가 다시 열면 파일이 존재하지 않는 것으로 나타났습니다. 파일을 만들고 저장하는 방법. 닫은 후 다시 여는 동시에 거기에 저장된 데이터를 사용할 수 있습니까?

p.s./쓰기가 여기에서 찍은 읽기 : The best way to store user input data for later work

답변

3

변경이는 MODE_APPEND 플래그로 aswell MODE_PRIVATE 플래그를 결합합니다

new BufferedWriter(new OutputStreamWriter(fileContext.getApplicationContext().openFileOutput(fileName, Context.MODE_PRIVATE)));

new BufferedWriter(new OutputStreamWriter(fileContext.getApplicationContext().openFileOutput(fileName, Context.MODE_PRIVATE | Context.MODE_APPEND)));

에.

P. 라인을 작성할 때마다 스트림을 열거 나 닫을 필요가 없습니다. 이렇게하면 많은 오버 헤드가 발생하며 모든 데이터가 처리 될 때까지 스트림을 열린 상태로 유지해야합니다.

관련 문제