-2

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

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

        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){
        }
    }

retr12
  • 102
  • 2
    Ошибок никаких нет, потому что вы их игнорируете. Оставлять пустыми catch-блоки это очень подлое занятие. Распечатайте в catch ошибку (например так: ex.printStackTrace()) и полученный стектрейс ошибки приложите в вопрос. – Vadik Sirekanyan Apr 30 '23 at 10:08
  • 1
    Кстати, код очень сильно можно сократить с помощью циклов. А то fos.write((line1 + lineSeparator)); fos.write((line2 + lineSeparator)); и так до 37 - нечитаемо совершенно. – Зонтик Apr 30 '23 at 11:29
  • @VadikSirekanyan я добавил ex.printStackTrace() но в Logcat нет никаких ошибок. Что делать? – retr12 Apr 30 '23 at 11:45
  • @Зонтик Идея хорошая, но ошибку не решила. Но все равно спасибо. – retr12 Apr 30 '23 at 11:45
  • 1
    Fos и fos это ведь не одно и то же? Первый закрывается а второй нет. – Serodv Apr 30 '23 at 12:59
  • Кстати, ещё одна идея, как можно улучшить код: использовать try-with-resources – Зонтик Apr 30 '23 at 16:16
  • @Serodv да оказалось проблема в этом большое спасибо я тогда сам ответ напишу на свой вопрос? – retr12 Apr 30 '23 at 18:26

1 Answers1

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){
        }
    }

retr12
  • 102
  • Вы можете засчитать свой ответ как правильный, для этого нажмите на галочку слева от вашего ответа. – Vadik Sirekanyan May 13 '23 at 23:54