Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 15
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2010
    Messaggi
    16

    Modifica file.txt con java

    Ci riprovo...
    ho un file txt creato e modificato in java che ha il seguente contenuto
    34 working
    23 working
    ecc..
    allora devo farmi una funzione che apre questo file in lettura
    una vota che trova un determinato id (es .34 ) deve cambiare lo stato da working a ready...
    cio che ho fattto io è cio che riporto sotto ma non vi è sovrascrittura dell informazione ma una nuova linea di testo viene aggiunta alla fine del file modificando cosi
    34 working
    23 working
    34 ready

    vi lascio il codice....spero vivamente che qualcuno possa aiutarmi

    public void prepare (int id)throws InterruptedException, IOException
    {

    String line;
    boolean esito=false;
    lock.lock();
    try
    {
    while (!free)
    {
    sospesi++;
    System.out.println("Processo "+ id +" mi sospendo");
    processi.await();
    sospesi--;
    }
    fr = new FileReader(f);
    input = new BufferedReader(fr);

    String check= new String (""+id);

    line=input.readLine();
    while ( !esito ) {

    if (line.startsWith(check))
    {

    esito=true;
    System.out.println(id+ "trovato");

    (P.S CREDO SI QUI IL PROBLEMA CON QUESTA ISTRUZIONE MI SCRIVE ALLA FINE DEL FILE MENTRE IO VOGLIO SOVRASCRIVERE LA LINEA)-->output.println(id+" ready");

    }
    else line = input.readLine();

    }

    fr.close();
    free=true;
    if(sospesi>0)
    processi.signal();

    }finally{lock.unlock();}

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Modifica file.txt con java

    Originariamente inviato da crocelu
    allora devo farmi una funzione che apre questo file in lettura
    una vota che trova un determinato id (es .34 ) deve cambiare lo stato da working a ready...
    cio che ho fattto io è cio che riporto sotto ma non vi è sovrascrittura dell informazione ma una nuova linea di testo viene aggiunta alla fine del file modificando cosi

    (P.S CREDO SI QUI IL PROBLEMA CON QUESTA ISTRUZIONE MI SCRIVE ALLA FINE DEL FILE MENTRE IO VOGLIO SOVRASCRIVERE LA LINEA)-->output.println(id+" ready");
    Innanzitutto non si capisce, dal codice, cosa è 'output'. Ma credo possa essere un PrintStream o PrintWriter.

    Ma a parte questo, ci sono dei concetti di fondo che valgono in generale (non centra S.O./linguaggio): in un file si può solo sovrascrivere dati o aggiungere dati al fondo.

    E in Java con qualunque tipo di "stream" comunque non sovrascrivi. Al massimo appendi al fondo o scrivi da zero (file nuovo o "azzerato").

    Le soluzioni tipicamente sono 2:

    a) Leggi tutti i dati in memoria, modifichi i dati (se mentre stai leggendo o mentre stai scrivendo o in mezzo ... sono questioni tue) e poi riscrivi tutto il file.

    b) Leggi i dati e man mano scrivi su un altro file (temporaneo o definitivo ... dipende da cosa devi fare). Modificando man mano quello che serve.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2010
    Messaggi
    16
    grazie
    output è un printstream
    quindi non c è nessuna possibilità di sovrscrivere l'informazione?
    ti spiego pk ho diversi thread che chiamano queste funzioni e mi sembre piuttosto oneroso creare ogni volta una nuovo file per immettere le nuove informazioni..

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da crocelu
    ti spiego pk ho diversi thread che chiamano queste funzioni e mi sembre piuttosto oneroso creare ogni volta una nuovo file per immettere le nuove informazioni..
    Allora o tieni tutti i dati in memoria, oppure se le modifiche devono essere subito "visibili" su file allora stabilisci un "tuo" formato di file che sia "binario" e a "record" di dimensione fissa oppure ancora usi un sistema di database, anche minimo magari "embedded" nella tua applicazione.

    E visto che parli di "più thread" ci sono in ogni caso le ben note questioni di sincronizzazione tra thread.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utente di HTML.it
    Registrato dal
    Jan 2010
    Messaggi
    16
    ma usando un file binario o a record potrei ovviare a questo problema di sovrascrittura?
    se si come?

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da crocelu
    ma usando un file binario o a record potrei ovviare a questo problema di sovrascrittura?
    se si come?
    Usando java.io.RandomAccessFile che ti permette l'accesso "casuale" e ovviamente la sovrascrittura dei dati.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    Utente di HTML.it
    Registrato dal
    Jan 2010
    Messaggi
    16
    saresti cosi gentile da indicarmi un codice che usi RandomAccess file per il mio problema specifico
    ?

  8. #8
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da crocelu
    saresti cosi gentile da indicarmi un codice che usi RandomAccess file per il mio problema specifico
    ?
    Tutorial Sun: Random Access Files

    EDIT: sorry, non ho visto subito ma il link sopra è dedicato a NIO ... lasciamolo stare!
    Esempi ne trovi a quintali con una ricerca
    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
    Jan 2010
    Messaggi
    16
    import java.nio.ByteBuffer;
    import java.nio.channels.FileChannel;
    import java.io.*;

    public class main {

    /**
    * @param args
    * @throws FileNotFoundException
    * @throws IOException
    */
    public static void main(String[] args) throws IOException {
    // TODO Auto-generated method stub
    String s = "I was here!\n";
    byte data[] = s.getBytes();
    byte lettura[] = null;
    System.out.println(data);
    File file=new File ("prova.txt");

    RandomAccessFile fw =new RandomAccessFile (file,"rw");
    int lunghezza_scritta=data.length;
    fw.write(data);


    fw.readFully(lettura);
    fw.close();
    System.out.println(lettura);


    }
    }
    mi da errore
    xception in thread "main" java.lang.NullPointerException
    at java.io.RandomAccessFile.readFully(Unknown Source)
    at main.main(main.java:25)

    scusa...ma nn capisco.mi potresti aiutare..

  10. #10
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da crocelu
    import java.nio.ByteBuffer;
    import java.nio.channels.FileChannel;
    Lascia stare NIO. Come ho corretto io sopra, quel link postato fa riferimento a NIO .... è una cosa "avanzata" ...

    Originariamente inviato da crocelu
    codice:
    byte lettura[] = null;
    		
    fw.readFully(lettura);
    mi da errore
    xception in thread "main" java.lang.NullPointerException
    Scusa ma gli passi un null!!! A readFully bisogna passare un array byte[] istanziato di una dimensione X e lui cerca di leggere esattamente X bytes che "deposita" nell'array.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

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.