Как я могу записать в файл во внутреннем хранилище Android с помощью opencsv?

У меня есть вспомогательный класс, который мне нужен для обработки данных для моего приложения.

Я настроил его так, чтобы он читал файл с URL. Само чтение работает, но у меня возникают трудности с записью этого файла во внутреннее хранилище приложения.

Согласно руководству по Android, я использовал FileOutputStream для записи файла. Однако мне трудно найти решение для написания FileOutputStream и решить его с помощью конструктора CSVWriter.

Код очень длинный, поэтому я опубликую суть, если вам понадобится больше информации о том, что делает мой код, но вот часть, которая вызывает у меня проблемы:

BufferedReader in = new BufferedReader(new InputStreamReader(file_url.openStream()));
            String test;
            CSVReader reader = new CSVReader(in, ';');
            FileOutputStream file_out = app_context.openFileOutput(file_name, Context.MODE_PRIVATE);
            CSVWriter writer = new CSVWriter(<What goes here?>, ';');

https://gist.github.com/anonymous/4cde37a8614d1c69cc03ec678d36a9d7

Исключение выдается с помощью CSVWriter writer = new CSVWriter(String.valueOf(file_out), ';');:

08-19 14:22:30.794 29439-30099/com.example.a1003137m.profitgraph W/System.err: java.io.FileNotFoundException: java.io.FileOutputStream@dcfb9b3: open failed: EROFS (Read-only file system)
08-19 14:22:30.794 29439-30099/com.example.a1003137m.profitgraph W/System.err:     at libcore.io.IoBridge.open(IoBridge.java:452)
08-19 14:22:30.794 29439-30099/com.example.a1003137m.profitgraph W/System.err:     at java.io.FileOutputStream.<init>(FileOutputStream.java:87)
08-19 14:22:30.794 29439-30099/com.example.a1003137m.profitgraph W/System.err:     at java.io.FileOutputStream.<init>(FileOutputStream.java:72)
08-19 14:22:30.794 29439-30099/com.example.a1003137m.profitgraph W/System.err:     at java.io.FileWriter.<init>(FileWriter.java:80)
08-19 14:22:30.794 29439-30099/com.example.a1003137m.profitgraph W/System.err:     at com.example.a1003137m.profitgraph.FileProcessor.processFile(FileProcessor.java:50)
08-19 14:22:30.794 29439-30099/com.example.a1003137m.profitgraph W/System.err:     at com.example.a1003137m.profitgraph.FileProcessor.run(FileProcessor.java:40)
08-19 14:22:30.795 29439-30099/com.example.a1003137m.profitgraph W/System.err: Caused by: android.system.ErrnoException: open failed: EROFS (Read-only file system)
08-19 14:22:30.795 29439-30099/com.example.a1003137m.profitgraph W/System.err:     at libcore.io.Posix.open(Native Method)
08-19 14:22:30.795 29439-30099/com.example.a1003137m.profitgraph W/System.err:     at libcore.io.BlockGuardOs.open(BlockGuardOs.java:186)
08-19 14:22:30.795 29439-30099/com.example.a1003137m.profitgraph W/System.err:     at libcore.io.IoBridge.open(IoBridge.java:438)
08-19 14:22:30.795 29439-30099/com.example.a1003137m.profitgraph W/System.err:  ... 5 more

1 ответ

Решение

new CSVReader(in, ';'); Сейчас in является InputStream, Так что бы вы использовали с new CSVWriter( out, ';');? Действительно: OutputStream!. Также для читателя вы использовали BufferedReader а также InputStreamReader,

Так что сделайте что-то похожее: BufferedWriter а также OutputStreamWriter,

Другие вопросы по тегам