0

テキストファイルから数行読みたい。次のボタンをクリックすると、これらの行が1つずつ表示されます。文字列をファイルに保存して、最初の行を読み取ることができます。しかし、次のボタンを使用して次の行を読み込もうとすると、機能しなくなります。誰かがこれに対する解決策を教えてもらえますか?前もって感謝します。

私は次のように定義しました、

BufferedReader buffreader;      
String line;
String fav;
StringBuilder text;   
InputStream instream;     
String favQuote0;

これは私のoncreateメソッドにあります

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_save);
    StringBuilder text = new StringBuilder();        

    try {
        // open the file for reading
        InputStream instream = openFileInput("myfilename.txt");

        // if file the available for reading
        if (instream != null) {             
            // prepare the file for reading
            InputStreamReader inputreader = new InputStreamReader(instream);
            BufferedReader buffreader = new BufferedReader(inputreader);   

            while (( line = buffreader.readLine()) != null) {       
                text.append(line);
                text.append('\n');                  
                fav = text.toString();             
            }
        }
    } catch (IOException e) {}

    TextView tv1 = (TextView)findViewById(R.id.textView2);
    tv1.setText(fav);   
}

これは私の次のボタンです

public void next (View view1) {         
    try {
        // open the file for reading
        InputStream instream = openFileInput("myfilename.txt");

        // if file the available for reading
        if (instream != null) {
            while (( line = buffreader.readLine()) != null) {               
                text.append(line);
                text.append('\n');                  
                fav = text.toString();             
            }
        }
    } catch (IOException e) {}

    TextView tv1 = (TextView)findViewById(R.id.textView2);
    tv1.setText(fav);
}
4

3 に答える 3

0

どちらの答えもそれを間違った方法で行います。コードの下に説明を投稿します。これが適切な方法です。

private int mCurrentLine;
private ArrayList<String> mLines;
private TextView mTextView;
private Button mButton;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_save);

    mCurrentLine = -1;
    mLines = new ArrayList<String>();
    mTextView = (TextView) findViewById(R.id.text_view);
    mButton = (Button) findViewById(R.id.button);

    try {
        readLinesAndSaveToArrayList();
    }

    catch (IOException e) {
        e.printStackTrace();
    }

    setTextAndIncrement();

    mButton.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            setTextAndIncrement();
        }
    });
}

private void readLinesAndSaveToArrayList() throws IOException {
    File file = new File("myfilename.txt");

    if (!file.exists()) {
        throw new FileNotFoundException("myfilename.txt was unable to locate");
    }

    FileReader fileReader = new FileReader(file);
    BufferedReader bufferedReader = new BufferedReader(fileReader);
    String line;

    while ((line = bufferedReader.readLine()) != null) {
        mLines.add(line);
    }

    bufferedReader.close();
}

private void setTextAndIncrement() {
    if (mCurrentLine == mLines.size() - 1) {
        return;
    }

    mCurrentLine++;
    mTextView.setText(mLines.get(mCurrentLine));
}

私がしているのは、ファイルの内容をスケーラブルにキャッシュすることですArrayList。各行は、配列内のインデックスに割り当てられます。0、1、2など。

mCurrentLineアレイ内の配置を処理します。現在の回線がないため、-1から始まります。setTextAndIncrement()配列では最初のインデックス(最初の行)である0に設定されます。継続的な呼び出しは、位置をインクリメントし、次の行を取ります。限界に達した場合、私は、mCurrentLineが行の最大サイズに等しいかどうかを確認するチェックを入れました(配列は1ではなく0から始まるため、mLines.size()-1、a-1)。

それ以外は、メソッドと変数に完全な長さの名前を使用することをお勧めします。それらを短くする必要はありません、それはそれらを読むのを難しくするだけです。XMLには、キャメルケースではなく小文字のみを含める必要があります。

于 2013-02-01T14:24:38.163 に答える
-1

これを試して。これは私のために働いています

BufferedReader reader = new BufferedReader(new InputStreamReader(instream));
StringBuffer bf = new StringBuffer();
String json = reader.readLine();
try {
do {

    bf.append(json);
    json = reader.readLine();
}while (json != null);
wt.flush();
wt.close();
Log.d("LOG", " read line output "+new String(bf)+" json "+json);
reader.close();     
} catch (Exception e) {
e.printStackTrace(); }

wtは、私が行を書くために使用したbufferedwriterです。リーダーから読み取り、ローカルに保存されているファイルに書き込みます。

于 2013-02-01T12:53:08.790 に答える
-2
try {
// open the file for reading
InputStream instream = new FileInputStream("myfilename.txt");

 // if file the available for reading
 if (instream != null) {
 // prepare the file for reading
 InputStreamReader inputreader = new InputStreamReader(instream);
 BufferedReader buffreader = new BufferedReader(inputreader);

  String line;

   // read every line of the file into the line-variable, on line at the time
   while (buffreader.hasNext()) {
 line = buffreader.readLine();
// do something with the line 
}

}
 } catch (Exception ex) {
  // print stack trace.
} finally {
 // close the file.
 instream.close();
 }
于 2013-02-01T12:20:56.053 に答える