Запись в файл OutputStreamWriter не работает

Рейтинг: -2Ответов: 1Опубликовано: 30.04.2023

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

Вот код записи текста:

        String lineSeparator = System.getProperty("line.separator");

        String quizfileName = onlyQuizName + ".qzp";
        

        DocumentFile documentFile = DocumentFile.fromTreeUri(this, selectedExportDir);
        DocumentFile quizdocfile = documentFile.createFile("text/qzp", quizfileName);
        quizdocfile.getUri();


        OutputStream Fos = null;

        try {
            Fos = getContentResolver().openOutputStream(quizdocfile.getUri(), "rw");
            OutputStreamWriter fos = new OutputStreamWriter(Fos, StandardCharsets.UTF_8);


            fos.write((line1 + lineSeparator));
            fos.write((line2 + lineSeparator));
            fos.write((line3 + lineSeparator));
            fos.write((line4 + lineSeparator));
            fos.write((line5 + lineSeparator));
            fos.write((line6 + lineSeparator));
            fos.write((line7 + lineSeparator));
            fos.write((line8 + lineSeparator));
            fos.write((line9 + lineSeparator));
            fos.write((line10 + lineSeparator));
            fos.write((line11 + lineSeparator));
            fos.write((line12 + lineSeparator));
            fos.write((line13 + lineSeparator));
            fos.write((line14 + lineSeparator));
            fos.write((line15 + lineSeparator));
            fos.write((line16 + lineSeparator));
            fos.write((line17 + lineSeparator));
            fos.write((line18 + lineSeparator));
            fos.write((line19 + lineSeparator));
            fos.write((line20 + lineSeparator));
            fos.write((line21 + lineSeparator));
            fos.write((line22 + lineSeparator));
            fos.write((line23 + lineSeparator));
            fos.write((line24 + lineSeparator));
            fos.write((line25 + lineSeparator));
            fos.write((line26 + lineSeparator));
            fos.write((line27 + lineSeparator));
            fos.write((line28 + lineSeparator));
            fos.write((line29 + lineSeparator));
            fos.write((line30 + lineSeparator));
            fos.write((line31 + lineSeparator));
            fos.write((line32 + lineSeparator));
            fos.write((line33 + lineSeparator));
            fos.write((line34 + lineSeparator));
            fos.write((line35 + lineSeparator));
            fos.write((line36 + lineSeparator));
            fos.write((line37 + lineSeparator));

            if (line2.startsWith("10")) {
                fos.write((line38 + lineSeparator));
                fos.write((line39 + lineSeparator));
                fos.write((line40 + lineSeparator));
                fos.write((line41 + lineSeparator));
                fos.write((line42 + lineSeparator));
                fos.write((line43 + lineSeparator));
                fos.write((line44 + lineSeparator));
                fos.write((line45 + lineSeparator));
                fos.write((line46 + lineSeparator));
                fos.write((line47 + lineSeparator));
                fos.write((line48 + lineSeparator));
                fos.write((line49 + lineSeparator));
                fos.write((line50 + lineSeparator));
                fos.write((line51 + lineSeparator));
                fos.write((line52 + lineSeparator));
                fos.write((line53 + lineSeparator));
                fos.write((line54 + lineSeparator));
                fos.write((line55 + lineSeparator));
                fos.write((line56 + lineSeparator));
                fos.write((line57 + lineSeparator));
                fos.write((line58 + lineSeparator));
                fos.write((line59 + lineSeparator));
                fos.write((line60 + lineSeparator));
                fos.write((line61 + lineSeparator));
                fos.write((line62 + lineSeparator));
                fos.write((line63 + lineSeparator));
                fos.write((line64 + lineSeparator));
                fos.write((line65 + lineSeparator));
                fos.write((line66 + lineSeparator));
                fos.write((line67 + lineSeparator));
                fos.write((line68 + lineSeparator));
                fos.write((line69 + lineSeparator));
                fos.write((line70 + lineSeparator));
                fos.write((line71 + lineSeparator));
                fos.write((line72 + lineSeparator));
            }

            Fos.close();

            Toast.makeText(this, "Файл сохранен", Toast.LENGTH_SHORT).show();
        }
        catch(IOException ex) {
        }
        finally {
            try {
                if(Fos!=null)
                    Fos.close();
            }
            catch(IOException ex){
            }
        }

Ответы

▲ 1Принят

Оказалось проблема была в том, что я закрывал Fos или же OutputStream, а не закрывал fos или же сам OutputStreamWriter. Мораль такова - не называйте переменные похожими именами. Я решил схалтурить и поплатился.

String lineSeparator = System.getProperty("line.separator");

        String quizfileName = onlyQuizName + ".qzp";
        

        DocumentFile documentFile = DocumentFile.fromTreeUri(this, selectedExportDir);
        DocumentFile quizdocfile = documentFile.createFile("text/qzp", quizfileName);
        quizdocfile.getUri();


        OutputStream Fos = null;

        try {
            Fos = getContentResolver().openOutputStream(quizdocfile.getUri(), "rw");
            OutputStreamWriter fos = new OutputStreamWriter(Fos, StandardCharsets.UTF_8);


            fos.write((line1 + lineSeparator));
            fos.write((line2 + lineSeparator));
            fos.write((line3 + lineSeparator));
            fos.write((line4 + lineSeparator));
            fos.write((line5 + lineSeparator));
            fos.write((line6 + lineSeparator));
            fos.write((line7 + lineSeparator));
            fos.write((line8 + lineSeparator));
            fos.write((line9 + lineSeparator));
            fos.write((line10 + lineSeparator));
            fos.write((line11 + lineSeparator));
            fos.write((line12 + lineSeparator));
            fos.write((line13 + lineSeparator));
            fos.write((line14 + lineSeparator));
            fos.write((line15 + lineSeparator));
            fos.write((line16 + lineSeparator));
            fos.write((line17 + lineSeparator));
            fos.write((line18 + lineSeparator));
            fos.write((line19 + lineSeparator));
            fos.write((line20 + lineSeparator));
            fos.write((line21 + lineSeparator));
            fos.write((line22 + lineSeparator));
            fos.write((line23 + lineSeparator));
            fos.write((line24 + lineSeparator));
            fos.write((line25 + lineSeparator));
            fos.write((line26 + lineSeparator));
            fos.write((line27 + lineSeparator));
            fos.write((line28 + lineSeparator));
            fos.write((line29 + lineSeparator));
            fos.write((line30 + lineSeparator));
            fos.write((line31 + lineSeparator));
            fos.write((line32 + lineSeparator));
            fos.write((line33 + lineSeparator));
            fos.write((line34 + lineSeparator));
            fos.write((line35 + lineSeparator));
            fos.write((line36 + lineSeparator));
            fos.write((line37 + lineSeparator));

            if (line2.startsWith("10")) {
                fos.write((line38 + lineSeparator));
                fos.write((line39 + lineSeparator));
                fos.write((line40 + lineSeparator));
                fos.write((line41 + lineSeparator));
                fos.write((line42 + lineSeparator));
                fos.write((line43 + lineSeparator));
                fos.write((line44 + lineSeparator));
                fos.write((line45 + lineSeparator));
                fos.write((line46 + lineSeparator));
                fos.write((line47 + lineSeparator));
                fos.write((line48 + lineSeparator));
                fos.write((line49 + lineSeparator));
                fos.write((line50 + lineSeparator));
                fos.write((line51 + lineSeparator));
                fos.write((line52 + lineSeparator));
                fos.write((line53 + lineSeparator));
                fos.write((line54 + lineSeparator));
                fos.write((line55 + lineSeparator));
                fos.write((line56 + lineSeparator));
                fos.write((line57 + lineSeparator));
                fos.write((line58 + lineSeparator));
                fos.write((line59 + lineSeparator));
                fos.write((line60 + lineSeparator));
                fos.write((line61 + lineSeparator));
                fos.write((line62 + lineSeparator));
                fos.write((line63 + lineSeparator));
                fos.write((line64 + lineSeparator));
                fos.write((line65 + lineSeparator));
                fos.write((line66 + lineSeparator));
                fos.write((line67 + lineSeparator));
                fos.write((line68 + lineSeparator));
                fos.write((line69 + lineSeparator));
                fos.write((line70 + lineSeparator));
                fos.write((line71 + lineSeparator));
                fos.write((line72 + lineSeparator));
            }

            Fos.close();
            fos.close(); //добавил строку закрытия writera


            Toast.makeText(this, "Файл сохранен", Toast.LENGTH_SHORT).show();
        }
        catch(IOException ex) {
        }
        finally {
            try {
                if(Fos!=null)
                    Fos.close();
            }
            catch(IOException ex){
            }
        }