1

我可以在 SAME 活动中写入然后读取文本文件,但是在从另一个 Activity 写入文本文件后,我无法读取它。

例如: 活动 A创建并写入文本文件。活动 B读取该文本文件。

我使用此代码写入Activity 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();
        }

然后我使用此代码尝试读取由Activity 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”)。如果您不确定,请尝试使用以下命令打印 Activity 的当前路径

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

而且,虽然我不能说我是 Android 专家,但你确定你的文件需要 Context.MODE_WORLD_WRITEABLE 吗?如果除了您的应用程序之外没有其他应用程序正在读取或写入它,那应该没有必要,对吧?

于 2012-06-08T20:04:43.200 回答