1

ファイルから最後の 10 行を取得しようとしていますが、取得できません。

私には 2 つのアクティビティがあります。1 つ目は、EditText からファイルにテキストを書き込みたいということです。2番目のアクティビティでは、保存されたデータを読み取ってtextViewに書き込もうとします

public class Date_Location extends Activity {

ImageView imageView;
EditText editTextDate, editTextLocation, editTextEdit;

private static final String TAG = Date_Location.class.getName();
private static final String FILENAME = "myFile.txt";

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    this.requestWindowFeature(Window.FEATURE_NO_TITLE);
    setContentView(R.layout.date_location);

    editTextDate = (EditText) findViewById(R.id.editText1);
    editTextLocation = (EditText) findViewById(R.id.editText2);
    editTextEdit = (EditText) findViewById(R.id.editText3);
    imageView = (ImageView) findViewById(R.id.next);
}

public void goNext(View view) {
    String Date = editTextDate.getText().toString();
    String Location = editTextLocation.getText().toString();
    String Comment = editTextEdit.getText().toString();

    writeToFile(Date);
    writeToFile(Location);
    writeToFile(Comment);

    Intent intent = new Intent(this, Detail_Data.class);
    startActivity(intent);
    Date_Location.this.finish();
}

private void writeToFile(String data) {
    String newline = "\r\n";
    try {

        OutputStreamWriter oswName = new OutputStreamWriter(openFileOutput(
                FILENAME, Context.MODE_APPEND));
        oswName.write(newline);
        oswName.write(data);
        oswName.close();
    } catch (IOException e) {
        Log.e(TAG, "File write failed: " + e.toString());
    }
}
}

そして、私の2番目のアクティビティは以下です

public class Detail_Data extends Activity {

TextView textView1;
ImageView imageView;
private static final String FILENAME = "myFile.txt";

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.detail_data);

    textView1 = (TextView) findViewById(R.id.textView1);
    imageView = (ImageView) findViewById(R.id.imageView2);

    String date = readFromFile();
    textView1.setText(date);

}

private String readFromFile() {
    String ret = "";

    try {
        InputStream inputStream = openFileInput(FILENAME);
        ArrayList<String> bandWidth = new ArrayList<String>();

        if (inputStream != null) {
            InputStreamReader inputStreamReader = new InputStreamReader(
                    inputStream);
            BufferedReader bufferedReader = new BufferedReader(
                    inputStreamReader);
            String receiveString = "";
            StringBuilder stringBuilder = new StringBuilder();

            while ((receiveString = bufferedReader.readLine()) != null) {
                 stringBuilder.append(receiveString+'\n');
                 bandWidth.add(receiveString);
                 if (bandWidth.size() == 10)
                  bandWidth.remove(0);
                }
            ret = stringBuilder.toString();
            inputStream.close();
        }
    } catch (FileNotFoundException e) {
        Log.i("File not found", e.toString());
    } catch (IOException e) {
        Log.i("Can not read file:", e.toString());
    }
    return ret;
}

public void goNext(View view) {
    imageView.setColorFilter(0xFFFF3D60, PorterDuff.Mode.MULTIPLY);

    Intent intent = new Intent(this, Agreement.class);
    startActivity(intent);
    Detail_Data.this.finish();
}
}

誰かが何か考えを持っているなら、私を助けてください。他のソリューションも試しましたが、最後の10レコードも取得できません。最後の 10 個のデータの代わりに、ファイルに書き込まれたすべてのレコードを取得しています。

4

3 に答える 3

0

入力/出力ストリームを開いた後、そのメソッドを使用します。

import java.io.FileInputStream;
import java.io.FileOutputStream;

public class Files {

    public static String readStringFile(FileInputStream fis) throws java.io.IOException {
        StringBuffer fileContent = new StringBuffer("");

        byte[] buffer = new byte[1024];

        while (fis.read(buffer) != -1) {
            fileContent.append(new String(buffer));
        }

        return fileContent.toString();
    }

    public static void writeStringFile(FileOutputStream fos, String text) throws java.io.IOException {
        fos.write(text.getBytes());
    }
}

まず、目的のファイル名で FileInputStream または FileOutputStream を作成し、上記のメソッドを呼び出します。メソッドは、文字列の読み取りと書き込みに対してのみ機能することに注意してください。

于 2013-10-17T10:56:38.440 に答える
0

リストサイズ= 10の場合にのみ、各行をリストに保存し、0の位置を削除します

したがって、最初のステップとして、すべてのファイルをリストに保存します。

その代わり

while ((receiveString = bufferedReader.readLine()) != null) {
             stringBuilder.append(receiveString+'\n');
             bandWidth.add(receiveString);
             if (bandWidth.size() == 10)
              bandWidth.remove(0);
            }

書く

while ((receiveString = bufferedReader.readLine()) != null) {
             stringBuilder.append(receiveString+'\n');
             bandWidth.add(receiveString);                
            }

最後の 10 行を新しいリストにコピーした後。

たとえば、次の場合:

List<String> bandWidth = new ArrayList<String>(Arrays.asList("a1", "a2", "a3","a4", "a5", "a6","a7", "a8", "a9","a10", "a11", "a12"));

よりもsubList

List<String> bandWidth10rows= bandWidth.subList(bandWidth.size()-10, bandWidth.size());

最後の 10 個のリスト アイテムが新しいリストにコピーされます。

完全に次のようになります。

while ((receiveString = bufferedReader.readLine()) != null) {
             stringBuilder.append(receiveString+'\n');
             bandWidth.add(receiveString);                
            }
List<String> bandWidthLastTenRows= bandWidth.subList(bandWidth.size()-10, bandWidth.size()); 
于 2013-10-17T11:00:28.823 に答える