1

SAME アクティビティでテキスト ファイルの書き込みと読み取りを行うことはできますが、別のアクティビティからテキスト ファイルに書き込みを行った後、テキスト ファイルを読み取ることができません。

例: アクティビティ Aは、テキスト ファイルを作成して書き込みます。アクティビティ Bはそのテキスト ファイルを読み取ります。

このコードを使用して、アクティビティ Aのテキスト ファイルに書き込みます。

FileOutputStream fos = null;
        OutputStreamWriter osw = null;
        try 
        {
            fos = openFileOutput("user_info.txt", Context.MODE_WORLD_WRITEABLE);
            osw = new OutputStreamWriter(fos);
            osw.write("text here");
            osw.close();
            fos.close();
        } 
        catch (FileNotFoundException e) 
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

次に、このコードを使用して、アクティビティ Aによって作成された同じテキスト ファイルを読み取ろうとしましたが、次のようになりますFileNotFoundException

            try 
            {
                FileInputStream fis = openFileInput("user_info.txt");
                InputStreamReader isr = new InputStreamReader(fis);
                BufferedReader buff = new BufferedReader(isr);
                String line;
                while((line = buff.readLine()) != null)
                {

                    Toast.makeText(this, line, Toast.LENGTH_LONG).show();
                }
            } 
            catch (FileNotFoundException e) 
            {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } 
            catch (IOException e) 
            {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

なぜ私が を取得しているのか誰にもわかりますFileNotFoundExceptionか?

パスの問題ですか?

4

2 に答える 2

0

それは確かにパスの問題です。あなたはこのように書くことができます

fpath=Environment.getExternalStorageDirectory().getAbsolutePath()+"/"+"yourdirectory";

File custdir=new File(fpath);
if(!custdir.exists())
        {
            custdir.mkdirs();

        }
                    File savedir=new File(custdir.getAbsolutePath());
                    File file = new File(savedir, filename);

                    if(file.exists())
                    {
                        file.delete();
                    }
                    FileOutputStream fos;
                    byte[] data = texttosave.getBytes();
                    try {
                        fos = new FileOutputStream(file);
                        fos.write(data);
                        fos.flush();
                        fos.close();
                        Toast.makeText(getBaseContext(), "File Saved", Toast.LENGTH_LONG).show();
                        finish();
                    } catch (FileNotFoundException e) {
                        Toast.makeText(getBaseContext(), "Error File Not Found", Toast.LENGTH_LONG).show();
                        Log.e("fnf", ""+e.getMessage());
                        // handle exception
                    } catch (IOException e) {
                        // handle exception
                        Toast.makeText(getBaseContext(), "Error IO Exception", Toast.LENGTH_LONG).show();
                    }

そして、あなたは次のように読むことができます

String locatefile=Environment.getExternalStorageDirectory().getAbsolutePath()+"/"+"yourdirectory"+"/filename";




try {
            br=new BufferedReader(new FileReader(locatefile));
                     while((text=br.readLine())!=null)
    {
        body.append(text);
        body.append("\n");

    }
 } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();

 } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
于 2012-06-08T20:21:47.600 に答える
0

アプリケーションがどのように構築されているかはよくわかりませんが、表示されるエラーはパスの問題のようです。両方のアクティビティが同じフォルダーにあると確信していますか? そうでない場合は、テキスト ファイルの絶対パス (「/home/user/text.txt」など) または相対パス (「../text.txt」など) を設定する必要があります。よくわからない場合は、次のようなコマンドを使用してアクティビティの現在のパスを出力してみてください

new File(".").getAbsolutePath();

そして、私は Android の専門家とは言えませんが、ファイルに Context.MODE_WORLD_WRITEABLE が必要ですか? あなた以外のアプリケーションが読み書きを行っていない場合、それは必要ありませんよね?

于 2012-06-08T20:04:43.200 に答える