0

我尝试实现此示例以从内部存储写入和读取数据,但是当我尝试从同一个 Android 应用程序读取写入的数据时,它不会给我任何结果。可能是什么错误?以下是我使用的代码。

public class SecondScreen extends Activity {

  String FILENAME = "hello_file";
  String string = "hello world!";



  /** Called when the activity is first created. */
@Override

public void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.secondscreen);

  //Using the Internal Storage
    try{
    FileOutputStream fos = openFileOutput(FILENAME, Context.MODE_PRIVATE);
    fos.write(string.getBytes());
    fos.close();

    }

    catch(Exception e){

    }


     TextView result;
     result = (TextView)findViewById(R.id.status);

 try{

     String test = "";
     FileInputStream fis = openFileInput("hello_file");
     fis.read(test.getBytes());
     fis.close();
     result.setText(test);

    }

    catch(Exception e){

    }


}

清单文件:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.wrd.ws"
android:versionCode="1"
android:versionName="1.0" >

<uses-sdk android:minSdkVersion="8" />

<application
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name" >
    <activity
        android:name=".ReadWriteDataActivity"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

</manifest>

更新后的代码:

public class ReadWriteDataActivity extends Activity {
    TextView tv;
String line;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    writeFileToInternalStorage();
    readFileFromInternalStorage();
    tv = (TextView) findViewById(R.id.textView);

// tv.setText(line);

}
private void writeFileToInternalStorage() 
{
    String eol = System.getProperty("line.separator");
    BufferedWriter writer = null;
    try 
    {

         File myFile = new File("/sdcard/mysdfile.txt");
         myFile.createNewFile();



      writer = new BufferedWriter(new OutputStreamWriter(openFileOutput("myFile.txt", MODE_WORLD_WRITEABLE)));
      writer.write("This is a test1."+ eol);
      writer.write("This is a test2." + eol);
    } 
    catch (Exception e) 
    {
        e.printStackTrace();
    } 
    finally 
    {
      if (writer != null) 
      {
        try 
        {
            writer.close();
        } 
        catch (IOException e) 
        {
            e.printStackTrace();
        }
      }
    }
}



private void readFileFromInternalStorage() 
{
    String eol = System.getProperty("line.separator");
    BufferedReader input = null;
    try 
    {
        input = new BufferedReader(new InputStreamReader(openFileInput("myFile.txt")));
        //String line;
        StringBuffer buffer = new StringBuffer();
        while ((line = input.readLine()) != null) 
        {
            buffer.append(line + eol);
        }
         tv.setText(buffer.toString().trim());
    } 
    catch (Exception e) 
    {
        e.printStackTrace();
    } 
    finally 
    {
        if (input != null) 
        {
            try 
            {
                input.close();
            } 
            catch (IOException e) 
            {
                e.printStackTrace();
            }
        }
    }
}

谢谢!

4

2 回答 2

3

我想建议你在处理 Flie API 时使用BufferedWriter和类。BufferedReader看看下面的方法,

写入文件

private void writeFileToInternalStorage() 
{
    String eol = System.getProperty("line.separator");
    BufferedWriter writer = null;
    try 
    {
      writer = new BufferedWriter(new OutputStreamWriter(openFileOutput("myfile", MODE_WORLD_WRITEABLE)));
      writer.write("This is a test1." + eol);
      writer.write("This is a test2." + eol);
    } 
    catch (Exception e) 
    {
        e.printStackTrace();
    } 
    finally 
    {
      if (writer != null) 
      {
        try 
        {
            writer.close();
        } 
        catch (IOException e) 
        {
            e.printStackTrace();
        }
      }
    }
}

读取文件

private void readFileFromInternalStorage() 
{
    String eol = System.getProperty("line.separator");
    BufferedReader input = null;
    try 
    {
        input = new BufferedReader(new InputStreamReader(openFileInput("myfile")));
        String line;
        StringBuffer buffer = new StringBuffer();
        while ((line = input.readLine()) != null) 
        {
            buffer.append(line + eol);
        }
    } 
    catch (Exception e) 
    {
        e.printStackTrace();
    } 
    finally 
    {
        if (input != null) 
        {
            try 
            {
                input.close();
            } 
            catch (IOException e) 
            {
                e.printStackTrace();
            }
        }
    }
}
于 2012-06-08T04:17:11.713 回答
2

看起来你在下面的代码中有问题:

String test = "";
FileInputStream fis = openFileInput("hello_file");
fis.read(test.getBytes());

您正在通过test.getBytes()并且test尺寸不足。所以解决方法是读取数组中的字节。

byte[] allBytes = new byte[100];
int indexInAllBytes = 0;
int bytesRead = 0;
FileInputStream fis = openFileInput("hello_file");

while(bytesRead != -1) {
  bytesRead = fis.read(allBytes, indexInAllBytes, allBytes.length);

  indexInAllBytes+=bytesRead;

  if(indexInAllBytes >= allBytes.length) {
     // We are exceeding the buffer size. Need bigger bytes array
     break;
  }
  // Also you can convert into string using StringBuilder.
}

注意:BufferedReader(s) 适用于读取/写入文本文件。如果您想要二进制文件,那么您可以使用上述逻辑并稍作改进。

于 2012-06-08T04:46:01.060 回答