Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 28
  1. #1

    [JAVA] cancellate stringa in un file txt

    salve ragazzi ho di nuovo un problema che mi attanaglia, vi ripeto le caratteristche del mio testo (.txt) dove sono scritti i seguenti dati

    1 30 20 49 carta 1256 0

    ora il mio problema è che in java devo leggere questa stringa e nel caso in cui l'ultimo numero è 0 (zero e in questo caso lo è) devo cancellare l'interga riga dal file di testo; il mio problema non è il confronto ma bensì l'uso di un metodo per la cancellazione di queste 7 stringhe, come posso fare?
    Se ti dicono siediti e stai zitto...tu alzati e muori combattendo!!!

  2. #2
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    72
    In java non puoi cancellare una singola stringa da un file.. se fai delle modifiche, devi riscrivere l'intero file...
    puoi fare così:
    codice:
            try {
                BufferedReader br = new BufferedReader(new FileReader(file));
                ArrayList<String> array=new ArrayList();
                String riga=null;
                riga = br.readLine();
                String separator=System.getProperty("line.separator");
                while(riga!=null){
                    if(!riga.endsWith("0")){
                        riga=riga+separator;
                        array.add(riga);
                    }
                    riga = br.readLine();
                }
                    br.close();
                BufferedWriter bw = new BufferedWriter(new FileWriter(file));
                for(String s : array)
                    bw.write(s);
                bw.close();
            } catch (IOException ex) {
                ex.printStackTrace();
            }

  3. #3
    QUESTO COSTRUTTO QUI MI CANCELLA TUTTE LE RIGHE CHE CONTENGONO LO 0 ALLA FINE DELLA RIGA, MA PER FARMI CANCELLARE SOLO QUELLA CHE INIZIA CON LA STRINGA CHE INSERISCO DA TASTIERA? CIOè LA x

    Stringa st=new Stringa();
    String x;
    System.out.println("Inserisci etichetta numerica del pacco che si vuole cancellare");
    System.out.print("");
    x=st.leggiStringa();

    try {
    BufferedReader br = new BufferedReader(new FileReader(file));
    ArrayList<String> array=new ArrayList();
    String riga=null;
    riga = br.readLine();
    String separator=System.getProperty("line.separator");

    while(riga!=null){
    if(!riga.endsWith("0")){
    riga=riga+separator;
    array.add(riga);
    }

    riga = br.readLine();
    }
    br.close();
    BufferedWriter bw = new BufferedWriter(new FileWriter(file));
    for(String s : array)
    bw.write(s);
    bw.close();




    } catch (IOException ex) {
    ex.printStackTrace();
    }

    }
    Se ti dicono siediti e stai zitto...tu alzati e muori combattendo!!!

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da blackguardian
    QUESTO COSTRUTTO QUI MI CANCELLA TUTTE LE RIGHE CHE CONTENGONO LO 0 ALLA FINE DELLA RIGA, MA PER FARMI CANCELLARE SOLO QUELLA CHE INIZIA CON LA STRINGA CHE INSERISCO DA TASTIERA? CIOè LA x
    Non è così complicato .... non capisco il tuo dubbio. Se lo stabilire se scrivere o meno la riga dipende solo dalla riga stessa (ovvero non hai bisogno di tenere in memoria altre righe precedenti o successive) allora non hai bisogno di ArrayList. E, vedendo il tuo codice sopra, ti dico subito che non hai nemmeno bisogno di fare concatenazioni inutili con il separator ottenuto dalla property!

    Il tutto si riduce a:

    codice:
    BufferedReader br = .......
    BufferedWriter bw = .....
    
    String linea;
    
    while ((linea = br.readLine()) != null) {
        if (condizione_per_scrivere_la_linea) {
            bw.write(linea);
            bw.newLine();
        }
    }
    Non mi pare complicato. Ovviamente vanno fatti i close() alla fine e vanno prese in considerazione le eccezioni nel modo corretto/appropriato.

    La condizione che io ho indicato condizione_per_scrivere_la_linea può essere quello che ti pare. Dipende da cosa devi testare. Se vuoi testare se la stringa inizia con un certo valore: startsWith() di String. Se vuoi testare se finisce con un certo valore: endsWith() di String. Se vuoi fare test più complessi ovviamente devi manipolare le stringhe nel modo appropriato.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    si si le devo tenere in memoria, ti faccio un esempio, se io ho:

    1 34 55 66 cartone 345 posta 0
    2 34 55 66 cartone 345 posta 2
    3 34 55 66 cartone 345 posta 4
    4 34 55 66 cartone 345 posta 4
    5 34 55 66 cartone 345 posta 0

    il mio comando è cancellare riga 1 solo se l'ultimo numero è 0, in questo caso si; nel mio pezzo di codice mi cancella tutte le righe che hanno lo 0 alla fine, e non quella che richiedo io da tastiera, ho provato a fare dei controlli con degli if ma non va...help please
    Se ti dicono siediti e stai zitto...tu alzati e muori combattendo!!!

  6. #6
    facendo cosi

    Stringa st=new Stringa();
    String x;
    System.out.println("Inserisci etichetta numerica del pacco che si vuole cancellare");
    System.out.print("");


    try {
    BufferedReader br = new BufferedReader(new FileReader(file));
    ArrayList<String> array=new ArrayList();
    String riga=null;
    riga = br.readLine();
    String separator=System.getProperty("line.separator");
    x=st.leggiStringa();
    while(riga!=null){
    if (!riga.startsWith(x)){

    if(!riga.endsWith("0")) {//fino ad ora mi cancella tutti i pacchi che hanno lo 0 finale
    riga=riga+separator;
    array.add(riga);
    }}



    riga = br.readLine();
    }
    br.close();
    BufferedWriter bw = new BufferedWriter(new FileWriter(file));
    for(String s : array)
    bw.write(s);
    bw.close();
    } catch (IOException ex) {
    ex.printStackTrace();
    }

    }

    mi cancella sia le righe diverse dal numero che inserisco cioè x e sia quelle dove vi è lo 0 alla fine, sto andando in pallone, non trovo una soluzione
    Se ti dicono siediti e stai zitto...tu alzati e muori combattendo!!!

  7. #7
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    72
    Originariamente inviato da andbin
    codice:
    BufferedReader br = .......
    BufferedWriter bw = .....
    
    String linea;
    
    while ((linea = br.readLine()) != null) {
        if (condizione_per_scrivere_la_linea) {
            bw.write(linea);
            bw.newLine();
        }
    }
    E' possibile aprire un bufferedReader e un bufferedWriter che leggono e scrivono contemporaneamente sullo stesso file?
    Sto provando adesso, ma sembra non funzionare:
    codice:
                FileReader fr = new FileReader(filePath);
                BufferedReader br=new BufferedReader(fr);
                FileWriter fw = new FileWriter(filePath);
                BufferedWriter bw=new BufferedWriter(fw);
                String inizio="1";
                String linea;
                while((linea=br.readLine())!=null){
                    System.out.println(linea);
                    if((linea.startsWith(inizio))){
                        bw.write(linea);
                        bw.newLine();
                    }            
                }
                br.close();
                bw.close();
    Il codice sembra svuotare il file.. Ho sbagliato io qualcosa?
    Per questo avevo suggerito l'ArrayList, per scrivere dopo aver chiuso il BufferedReader..
    Sul line.separator hai ragione.. una complicazione inutile

  8. #8
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da fr84
    E' possibile aprire un bufferedReader e un bufferedWriter che leggono e scrivono contemporaneamente sullo stesso file?
    Ovviamente no. La cosa più semplice è quella di scrivere su un file "temporaneo" e alla fine, se tutto ok, cancellare il file vecchio e rinominare il file temporaneo.
    Leggere tutto il file e tenerselo in memoria (es. mettere le righe in un ArrayList) va bene, chiaramente, se si sa a priori che il file è di dimensioni modeste.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  9. #9
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    72
    ok capito
    grazie

  10. #10
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    72
    Originariamente inviato da blackguardian
    si si le devo tenere in memoria, ti faccio un esempio, se io ho:

    1 34 55 66 cartone 345 posta 0
    2 34 55 66 cartone 345 posta 2
    3 34 55 66 cartone 345 posta 4
    4 34 55 66 cartone 345 posta 4
    5 34 55 66 cartone 345 posta 0

    il mio comando è cancellare riga 1 solo se l'ultimo numero è 0, in questo caso si; nel mio pezzo di codice mi cancella tutte le righe che hanno lo 0 alla fine, e non quella che richiedo io da tastiera, ho provato a fare dei controlli con degli if ma non va...help please
    Potresti fare così:
    codice:
                File origine=new File(filePath); //è il file da modificare
                File temp=new File(filePath2); //file temporaneo su cui scrivo
                FileReader fr = new FileReader(origine);
                BufferedReader br=new BufferedReader(fr);
                FileWriter fw = new FileWriter(temp);
                BufferedWriter bw=new BufferedWriter(fw);
                String inizio="1";
                String fine="0";
                String linea;
                while((linea=br.readLine())!=null){
                    System.out.println(linea);
                    if((!linea.startsWith(inizio))||(!linea.endsWith(fine))){
                        bw.write(linea);
                        bw.newLine();
                    }            
                }
                br.close();
                bw.close();
                origine.delete();
                temp.renameTo(origine);
    Il codice scrive sul file temporaneo tutte le righe che non cominciano per inizio (!linea.startsWith(inizio)) - così l'unica riga che puoi cancellare è quella presa da tastiera - o non terminano per fine (!linea.endsWith(fine)) - in questo modo cancelli la riga solo se termina con 0

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.