Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    [Android] Problema creazione file

    ciao!

    al click su un bottone itero su un file json locale, e creo un file txt.
    codice:
        private void createTxt() {
            try {
                JSONArray jsonArray = new JSONArray(JsonFile.read("........."));
                StringBuilder sb = new StringBuilder();
                for (int i = 0; i < jsonArray.length(); i++) {
                    JSONObject jo = jsonArray.getJSONObject(i);
                    sb.append(jo.get("title")).append("\n");
                }
                JsonFile.create(sb.toString(), Const.LOCAL_PATH + Const.TXT_FILMS);
            } catch (ClientProtocolException ex) {
            } catch (IOException ex) {
            } catch (JSONException ex) {
            }
        }
    il problema è che il file ha una sola riga!
    però se stampo la lista, le voci ci sono tutte.
    qualche dritta??

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da fermat Visualizza il messaggio
    al click su un bottone itero su un file json locale, e creo un file txt.
    codice:
                JsonFile.create(sb.toString(), Const.LOCAL_PATH + Const.TXT_FILMS);
    il problema è che il file ha una sola riga!
    Non me ne intendo molto di Android ma qui la questione è più che altro concettuale. Stai creando un file certamente di testo .... ma è un file JSON, quindi nel file vedi la sintassi JSON per rappresentare la stringa contenuta in sb.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    però la stringa sb.toString() che esce, non è in formato JSON.
    ma sono una riga sotto l'altra.
    cioè, a me esce così:
    codice:
    voce 1
    voce 2
    voce 3
    .......
    quindi non in formato json.
    sembra più che altro che si fermi a scrivere la prima riga.

    però può essere che mi sfugga qualcosa.
    io in pratica di un file json devo prendere tutti i valori del campo (title), e metterli uno sotto l'altro dentro a un file di testo.

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da fermat Visualizza il messaggio
    però la stringa sb.toString() che esce, non è in formato JSON.
    No certo, in sb c'è una normale stringa con dei \n in mezzo.
    Ma quel JsonFile.create cosa fa? Non lo conosco ma dal nome immagino che crei un file in formato JSON.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    si hai ragione.

    in verità è una mia classe.
    l'ho nominata così perchè gestiva solo file json.
    questa dei file txt è una esigenza venuta dopo.
    in effetti devo mettere un pò a posto i nomi delle classi.

    cmq ecco il codice di JsonFile.create:
    codice:
        public static void create(String input, String outputFile)
                throws IOException {
            InputStream is = new ByteArrayInputStream(input.getBytes());
            BufferedReader reader = new BufferedReader(new InputStreamReader(is));
            BufferedWriter bw = new BufferedWriter(new FileWriter(outputFile));
            bw.write(reader.readLine());
            reader.close();
            bw.flush();
            bw.close();
        }
    uhm, forse qualcosa sul BufferedWriter??

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da fermat Visualizza il messaggio
    uhm, forse qualcosa sul BufferedWriter??
    No, il punto, da quello che vedo, è che fai un solo readLine(), quindi se la stringa in input fosse es. "AAA\nBBB\nCCC\n", chiaramente prendi e poi scrivi solo "AAA". Mi pare abbastanza lampante.

    Tra l'altro non ha molto senso passare per la sequenza di byte e ByteArrayInputStream. Esiste java.io.StringReader

    E comunque devi sapere/valutare tu come deve essere scritto il "newline". Sei su Android, quindi credo che "\n" sia più che appropriato ma dipende poi da dove/come verrà letto il file.
    Se tu vuoi scrivere sul file esattamente "AAA\nBBB\nCCC\n", basta passare questa stringa al write di un qualunque Writer ... né più né meno.

    Detto in altro modo:

    FileWriter fw = .......
    fw.write("AAA\nBBB\nCCC\n");


    è tecnicamente corretto.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Semplicemente... da nessuna parte nel tuo metodo "create()" hai fatto in modo di "preservare" gli "a capo".

    Da una parte leggi con "readLine()", che restituisce una riga pulita (senza "a capo") e, comunque, si ferma alla prima riga.
    Dall'altra scrivi con write(), che non aggiunge nessun "a capo".

    Risultato... viene scritta solo la prima riga.

    Quello che mi domando è: perchè per scrivere su un file una stringa, la vai a ri-leggere usando un InputStreamReader? Ce l'hai già la stringa... buttala sul file:

    codice:
    public static void create(String input, String outputFile) throws IOException {
       FileWriter fw = new FileWriter( outputFile );
       BufferedWriter bw = new BufferedWriter( fw );
       PrintWriter pw = new PrintWriter( bw );
       pw.println( input );
       pw.flush();
       pw.close();
    }

    (se proprio vuoi usare la bufferizzazione... altrimenti basta solo il FileWriter).


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  8. #8
    grazie a entrambi.
    ho sbagliato io perchè ho usatoquel metodo che uso per un'altra cosa, e non ci ho minimamente pensato che magari potesse non andare bene.

    stasera provo e vi faccio sapere!!

  9. #9
    codice:
        public static void createTxtList(String txt, String f) throws IOException {
            FileWriter fw = new FileWriter(f);
            fw.write(txt);
            fw.close();
        }
    così funziona!
    grazie a entrambi per la dritta!!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.