从文本文件中读取不正常

时间:2018-06-09 18:45:20

标签: java android bufferedreader

嘿伙计们在尝试阅读android java中的文本文件时,我真的很难解决问题。

public String readFromFile(String filename)
{
    String content = "";
    try
    {
        File dir = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOCUMENTS) + "/MyApplication");
        File file = new File(dir, filename);

        Scanner scanner = new Scanner(file);
        String line = "";

        while(scanner.hasNextLine())
        {
            line = scanner.nextLine();
            content += line + "\n";
        }
        scanner.close();

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

我尝试使用扫描仪和缓冲读卡器来提取内容

public List<String> readFromFile(String filename)
{
    List<String> lines = new ArrayList<String>();
    FileReader fileReader;
    BufferedReader bufferedReader;

    try
    {
        File dir = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOCUMENTS) + "MyApplication");
        File file = new File(dir, filename);

        fileReader = new FileReader(file);
        bufferedReader = new BufferedReader(fileReader);

        String line = bufferedReader.readLine();
        while(line != null)
        {
            lines.add(line);
            bufferedReader.readLine();
        }
        bufferedReader.close();
    }
    catch(Exception e)
    {
        e.printStackTrace();
    }
    return lines;
}

但它们似乎都不起作用。函数返回零,就像文件为空。此外,我没有收到错误消息,我仔细检查了路径。通常这些功能对我来说非常好,但我无法解决这个问题。

我感谢任何帮助:)

编辑:如果发现问题。一切都很好,文件的权限或位置,问题只是我把

FileOutputStream fileOutputStream = new FileOutputStream(file)
在我调用readFromFile()方法之前的代码中的

。我认为因为readFromFile()方法返回该文件为空。谢谢你的回答!

3 个答案:

答案 0 :(得分:9)

试试这个:

我假设您的文本文件位于SD卡上

    //Find the directory for the SD Card using the API
//*Don't* hardcode "/sdcard"
File sdcard = Environment.getExternalStorageDirectory();

//Get the text file
File file = new File(sdcard,"file.txt");

//Read text from file
StringBuilder text = new StringBuilder();

try {
    BufferedReader br = new BufferedReader(new FileReader(file));
    String line;

    while ((line = br.readLine()) != null) {
        text.append(line);

要从内部存储中读取数据,您需要使用app文件夹并从此处阅读内容

String yourFilePath = context.getFilesDir() + "/" + "hello.txt";

File yourFile = new File( yourFilePath );

您也可以使用此方法

   FileInputStream fis = context.openFileInput("hello.txt");
   InputStreamReader isr = new InputStreamReader(fis);
   BufferedReader bufferedReader = new BufferedReader(isr);
   StringBuilder sb = new StringBuilder();
   String line;
   while ((line = bufferedReader.readLine()) != null) {
       sb.append(line);
   }

答案 1 :(得分:1)

第二种方法不起作用,因为在您的while循环中,您没有将readLine方法的结果分配给line变量。改变这个

bufferedReader.readLine();

到这个

line = bufferedReader.readLine();

此外,在MyApplication字符串之前,您在文件路径中缺少/

我尝试了第一种方法,它成功读取了文件。检查文件是否存在,并检查其内容。另外,在阅读之前,请通过调用

检查您的应用是否有权限
if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE)
            != PackageManager.PERMISSION_GRANTED) {
    Log.e(TAG, "READ_EXTERNAL_STORAGE permission not granted!");
}

答案 2 :(得分:0)

您是否已授予您的应用读取文件权限?

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