Android:如何将文件写入内部存储

时间:2017-06-16 10:38:13

标签: java android internal-storage

我正在开发一个简单的android应用程序,我需要在内部存储设备中编写一个文本文件。我知道关于这个问题有很多问题(和答案),但我真的无法理解我在做错的方式。

这是我在活动中使用的一段代码,用于编写文件:

public void writeAFile(){
    String fileName = "myFile.txt";
    String textToWrite = "This is some text!";
    FileOutputStream outputStream;

   try {
      outputStream = openFileOutput(fileName , Context.MODE_PRIVATE);
      outputStream.write(textToWrite.getBytes());
      outputStream.close();
   } catch (Exception e) {
     e.printStackTrace();
   }
}

我真的不明白我在做什么错。另外,我在Android Studio和我的手机上的模拟器上尝试了this项目,以便了解我做错了什么,但即使使用该项目,也不会在手机或模拟器上写入任何文件。< / p>

编辑: 我知道没有文件写入我的内部存储器,因为在我写完文件之后,我尝试使用以下代码读取文件的内容:

public void ReadBtn(View v) {
    //reading text from file
    try {
        FileInputStream fileIn=openFileInput("myFile.txt");
        InputStreamReader InputRead= new InputStreamReader(fileIn);

        char[] inputBuffer= new char[READ_BLOCK_SIZE];
        String s="";
        int charRead;

        while ((charRead=InputRead.read(inputBuffer))>0) {
            String readstring=String.copyValueOf(inputBuffer,0,charRead);
            s +=readstring;
        }
        InputRead.close();
        textmsg.setText(s);
    } catch (Exception e) {
        e.printStackTrace();
    }
}

根本没有显示任何内容。

5 个答案:

答案 0 :(得分:16)

使用以下代码将文件写入内部存储器

编辑:添加e.printStackTrace();以阻止阻止作为良好做法和权限提醒

public void writeFileOnInternalStorage(Context mcoContext,String sFileName, String sBody){      
    File file = new File(mcoContext.getFilesDir(),"mydir");
    if(!file.exists()){
        file.mkdir();
    }

    try{
        File gpxfile = new File(file, sFileName);
        FileWriter writer = new FileWriter(gpxfile);
        writer.append(sBody);
        writer.flush();
        writer.close();

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

    }
}

并且不要忘记在清单中添加外部存储写入和读取权限:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

答案 1 :(得分:9)

  

手机或模拟器上都没有写入任何文件。

是的,有。它被写入Android SDK引用的internal storage。这 作为用户认为是&#34;内部存储&#34;,而您作为用户无法看到设备内部存储中的内容(除非它扎根)。

如果要将文件写入用户可以看到的位置,请使用external storage

这个基本的Android开发主题在Android应用程序开发的任何体面的书中都有介绍。

答案 2 :(得分:1)

保存到内部存储空间

        data="my Info to save";
        try {
           FileOutputStream fOut = openFileOutput(file,MODE_WORLD_READABLE);
           fOut.write(data.getBytes());
           fOut.close();
           Toast.makeText(getBaseContext(),"file saved",Toast.LENGTH_SHORT).show();
        }
        catch (Exception e) {
           // TODO Auto-generated catch block
           e.printStackTrace();
        }

从内部存储中读取

      try {
           FileInputStream fin = openFileInput(file);
           int c;
           String temp="";
           while( (c = fin.read()) != -1){
              temp = temp + Character.toString((char)c);
           }
           tv.setText(temp);
           Toast.makeText(getBaseContext(),"file read",Toast.LENGTH_SHORT).show();
        }
        catch(Exception e){
        }

答案 3 :(得分:0)

您是否已请求写入外部存储的权限?

https://developer.android.com/training/basics/data-storage/files.html#GetWritePermission

也许你的try \ catch块吞噬了一个可以告诉你问题是什么的异常。

此外,您似乎没有设置保存到的路径。

例如:Android how to use Environment.getExternalStorageDirectory()

答案 4 :(得分:-1)

  

要查看设备上的文件,您可以记录文件位置>由File.getAbsolutePath()之类的方法提供,然后>然后使用Android Studio的设备>文件资源管理器浏览设备文件。

我有一个类似的问题,文件已写入,但我从未看到过。我使用了设备文件浏览器,它在那里等着我。

Device File Manager

    String filename = "filename.jpg";
    File dir = context.getFilesDir();
    File file = new File(dir, filename);

    try {
        Log.d(TAG, "The file path = "+file.getAbsolutePath());
        file.createNewFile();
    } catch (Exception e) {
        e.printStackTrace();
    }
    return true;