Чтение из текстового файла не работает должным образом - PullRequest
0 голосов
/ 09 июня 2018

Эй, ребята, я действительно борюсь с проблемой при попытке прочитать текстовый файл в 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 голосов
/ 09 июня 2018

дали ли вы разрешение на чтение в вашем приложении?

<uses-permission 
android:name="android.permission.READ_EXTERNAL_STORAGE" / >
0 голосов
/ 09 июня 2018

Второй метод не работает, потому что в цикле 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!");
}
0 голосов
/ 09 июня 2018

Попробуйте это:

Я полагаю, ваш текстовый файл находится на 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);

Для чтения данных из внутреннего хранилища вам нужна папка с файлами приложения и чтение содержимого отсюда

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);
   }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...