Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it L'avatar di Dark867
    Registrato dal
    Mar 2010
    Messaggi
    435

    Scrittura casuale su un file

    Ciao a tutti, vorrei sapere se c'è una classe che, dato un file testuale di n righe, mi permetta di scrivere a una determinata riga m, con 0<m<n, shiftando di consequenza le righe che vengono dopo. Ho provato randomaccessfile ma sembra che mi sovrascriva le righe seguenti...

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

    Re: Scrittura casuale su un file

    Originariamente inviato da Dark867
    dato un file testuale di n righe, mi permetta di scrivere a una determinata riga m, con 0<m<n, shiftando di consequenza le righe che vengono dopo.
    No non esiste. E non è una questione di Java .... vale in generale. Nei file il contenuto (tutto o in parte che sia) non può "shiftare" in avanti o indietro, nel senso che non puoi inserire/eliminare fisicamente byte in mezzo e pensare che il resto seguente si "sposti".

    In un file si possono solo sovrascrivere i byte già esistenti o "appendere" (aggiungere) al fondo nuovi byte.
    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 L'avatar di Dark867
    Registrato dal
    Mar 2010
    Messaggi
    435
    Questo lo so ma speravo in una classe che implementasse già di suo l'algoritmo un po' come fa vector con i suoi add() remove(),ecc. ... vabbè la creerò io, grazie cmq

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Dark867
    vabbè la creerò io
    Quando si deve inserire/eliminare qualcosa in mezzo ad un file, come ad esempio inserire/eliminare righe in un file di testo, gli approcci tipicamente sono 2:

    a) Leggi tutto il documento per averlo in memoria (in una certa struttura dati, es. ArrayList di String per le righe, un unico String/StringBuffer o altro), quindi apporti le modifiche in memoria o le apporti comunque mentre riscrivi il tutto sullo stesso file partendo da zero.

    b) Leggi un po' per volta dal file (es. "a righe" se è di testo) e man mano scrivi su un altro file temporaneo decidendo appunto se/cosa scrivere. Il file originale puoi rimuoverlo o il nuovo puoi sostituirlo al vecchio.
    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 L'avatar di Dark867
    Registrato dal
    Mar 2010
    Messaggi
    435
    Grazie ancora, penso userò il primo metodo

  6. #6
    Utente di HTML.it L'avatar di Dark867
    Registrato dal
    Mar 2010
    Messaggi
    435
    Torno in questo topic per chiedere ad andbin (ma anche gli altri sono benvenuti ) un giudizio sulla soluzione che ho trovato a un esercizio assegnatomi:
    in pratica vi è un server che gestisce un file di R righe (numero fisso) e tot client che vogliono accedere a tale file. Le letture/scritture su righe diverse possono procedere in parallelo, quelle sulla stessa riga in concorrenza.

    Ora, siccome l'aggiornamento del file è abbastanza lungo (occorre, come abbiamo detto, riscriverlo da capo) e il client vorrebbe ricevere subito una risposta l'ho strutturato così:

    1)Il server mantiene un array locale di stringhe che rappresentano le righe del file ed è su quelle che avvengono letture e scritture.
    2)Vi è un thread che si occupa unicamente di aggiornare il file.

    Quindi l'esecuzione è questa
    1)Il server riceve una richiesta di scrittura.
    2)Aggiorna la stringa corrispondente e comunica l'esito al client.
    3)Da un comando al thread di aggiornamento e torna in attesa di altre richieste.

    Per la lettura il punto 3) non viene eseguito, ovviamente.

    Che ne pensate?

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.