无法在android内部存储中写入文件

时间:2015-01-27 16:17:19

标签: android

请帮我一把。

我正在尝试在Android内部存储中的文件文本中写一些东西。

我正在使用如下的流方法。 顺便说一句,它不写。

你帮我解决了吗?

public class MainActivity extends ActionBarActivity {

    File f=new File("box");
    public void scrivi(String data)
    {try {

        FileOutputStream fos = new FileOutputStream(f);
        PrintWriter pw = new PrintWriter(fos);
        pw.write("");
    }
    catch(FileNotFoundException e ){
        Toast t = Toast.makeText(this, ("Il FILE NON ESITE"), Toast.LENGTH_LONG);
        t.show();

    }
    }

    public void read( String word)
    {try{
        FileInputStream fis = new FileInputStream(f);
        BufferedReader br = new BufferedReader(new InputStreamReader(fis));
        String line="";
        while((line=br.readLine())!=null);
        println(line);
    }

    catch(FileNotFoundException n){Toast x = Toast.makeText(this, ("Il FILE NON SI PUO' LEGGERE"), Toast.LENGTH_LONG);
        x.show();}
        catch(IOException w){{Toast q = Toast.makeText(this, ("c'e' un problema"), Toast.LENGTH_LONG);
            q.show();}}
    }
    @Override
    protected void onCreate(Bundle savedInstanceState){
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);

            ArrayList lista = new ArrayList();
            Intent j = getIntent();
            String nome = j.getStringExtra("nome");
            lista.add(nome);
            scrivi(nome);








        if(nome!=null)

    {

        Toast toast = Toast.makeText(this, ("ciao " + " " + nome), Toast.LENGTH_LONG);
        toast.show();
    }}







    public void go(View v){
        Intent intent=new Intent(this,SecondActivity.class);
        startActivity(intent);


    }
    public void time(View c){
        Intent i=new Intent(this,ActivityPicker.class);
        startActivity(i);
    }

    public void pass(View p){
        EditText nome6=(EditText)findViewById(R.id.nome6);
        String inviaDati = nome6.getText().toString();
        read(inviaDati);
    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }
}

2 个答案:

答案 0 :(得分:1)

File f=new File("box");
FileOutputStream fos = new FileOutputStream(f);

将尝试打开并在必要时在当前工作目录中创建一个文件,该文件在Android上无法写入

如果您将new fileOutputStream(f)替换为在活动实例或其他有效上下文中调用的openFileOutput(f),您将根据标题建议在应用内部存储中获取文件。

openFileInput(f)可以在阅读方面使用。如果您想明确使用此位置,也可以将此位置作为getFilesDir()的路径获取。

Shine建议写一些非空的东西并使用日志而不是Toasts来获取细节也很重要。

我还建议您明确关闭输出流,而不是等待它在包含它的方法结束后的某些不可预测的时间进行垃圾收集时发生。

答案 1 :(得分:0)

这是因为你没有在data方法中使用scrivi()。试试这个:

 public void scrivi(String data, Context ctx){
  try {
       FileOutputStream fos = ctx.openFileOutput();
       PrintWriter pw = new PrintWriter(fos);
       pw.write(data);
  }
  catch(FileNotFoundException e ){
      Log.e("ERR", e.getMessage();
  }
}

作为旁注,我不建议在内部“业务”方法中使用Toast,因为如果在Activity上下文之外调用它可能不会按预期工作。要跟踪错误,只需使用Log.warn / info / debug