Java Android SDK-无法写入/读取文件

Java Android SDK-无法写入/读取文件,java,android,file,sdk,Java,Android,File,Sdk,我对Android SDK非常陌生,无法让文件写入/读取正常工作。请注意,我对Java也是相当陌生的。程序只需将字符串写入文件,读取相同的字符串,然后将TextView更改为该读取字符串。程序将运行,但不会更改TextView。有人能告诉我我做错了什么吗?谢谢 MainActivity.java package com.example.test; import java.io.BufferedReader; import java.io.File; import java.io.Fil

我对Android SDK非常陌生,无法让文件写入/读取正常工作。请注意,我对Java也是相当陌生的。程序只需将字符串写入文件,读取相同的字符串,然后将TextView更改为该读取字符串。程序将运行,但不会更改TextView。有人能告诉我我做错了什么吗?谢谢

MainActivity.java

    package com.example.test;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileReader;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.Menu;
import android.widget.TextView;

public class MainActivity extends Activity {

    public String readFileLine(String filepath) throws java.io.FileNotFoundException, java.io.IOException {
        //opens file and returns first line
        FileReader fr = new FileReader (new File(filepath));
        BufferedReader inputStream = new BufferedReader (fr);
        String temp = inputStream.readLine();
        inputStream.close();
        return temp;
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        FileOutputStream outputStream_local;
        try {
          outputStream_local = openFileOutput("local.txt", Context.MODE_PRIVATE);
          outputStream_local.write("asdf".getBytes());
          outputStream_local.close();
        } catch (Exception e) {
          e.printStackTrace();
        }
        TextView temp = (TextView) findViewById(R.id.getMe);

        try {
            temp.setText(readFileLine(getFilesDir().toString() + "local.txt"));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

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

}
activity_main.xml

  <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

    <TextView
        android:id="@+id/getMe"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/hello_world" />

</RelativeLayout>

确保您在manifest.xml文件中为您的应用程序授予以下权限

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


您需要授予这些权限才能从设备写入文件和读取文件。

@Mike M.不,不要请求该权限,因为涉及的文件不在外部存储器上。Oop!“你说得对,”克里斯塔顿说。我没有仔细阅读代码。我的错。谢谢刚刚添加了logcat。另外,我在实际的手机上使用内部存储,而不是模拟器@kunu您是否尝试过使用Context.openFileInput()方法来获取FileInputStream,而不是使用FileReader?它是用来从应用程序的私有存储中读取的,因此您不需要向它传递完整的文件路径,只需传递文件名。@sigmabeta,似乎用于读取,但现在textView为空,因此写入方法不正确。还有什么想法吗?没有,这些权限与存储在应用程序私有目录中的文件完全无关。
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />