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

    BufferedWriter...ha dimensione?

    Salve ragazzi, colgo l'occasione per presentarmi a tutti.
    Sono generalekamikaze, studente della facoltà di Informatica e newbbie nella programmazione.
    Stò cercando di scrivere un programmino, che, letto un file html (di base per eBay, per intenderci), vada a sostituire degli elementi generici, prendendoli da un altro file apposito.
    Il programma che o messo su, seppur non completo, sembra in parte svolgere il suo lavoro, se non per il fatto che il nuovo file creato, non ha la stessa lunghezza del file generico, bensì viene tagliato.
    Forse c'è un limite di righe per i file di testo scritti???
    Ecco a voi il codice:

    codice:
    import java.io.* ;
    /**
     * Classe utile a creare inserzioni ebay.
     * 
     * @author generalekamikaze
     *
     */
    public class Inserction {
    	
    	private final int LINES = 6;
    	private final int LINES_GEN = 100;
    	private final String SUB1_1 = "#titolo#";
    	private final String SUB1_2 = "</p>";
    	private final String SUB1_3 = "\n";
    	private final String SUB2_1 = "#comaptibile#";
    	private final String SUB2_2 = "</span></p>";
    	private final String SUB2_3 = "\n";
    	private final String SUB3_1 = "#descr#";
    	private final String SUB3_2 = "</td></tr></tbody></table></p>";
    	private final String SUB3_3 = "\n";
    	private final String SUB4_1 = "<a href=\"";
    	private final String SUB4_2 = "#link2#";
    	private final String SUB4_3 = "\" target=\"_blank\"><img src=\"";
    	private final String SUB4_4 = "\" height=\"108\" /></a>\n";
    	private final String SUB5_2 = "#link3#";
    	private final String SUB5_3 = "\" height=\"108\" /></a>
    \n";
    	private final String SUB6_1 = "
    
    <img style=\"width: 182px; height: 256px; top: 16px; left: 208px;\" src=\"";
    	private final String SUB6_2 = "#link1#";
    	private final String SUB6_3 = "\"></p></div>\n";
    	private final String SUB1 = SUB1_1 + SUB1_2 + SUB1_3;
    	private final String SUB2 = "SUB2_1 + SUB2_2 + SUB2_3";
    	private final String SUB4 = SUB4_1 + SUB4_2 + SUB4_3 + SUB4_2 + SUB4_4;
    	private final String SUB5 = "SUB4_1 + SUB5_2 + SUB4_3" + SUB5_2 + SUB5_3;
    	private final String SUB3 = "SUB3_1 + SUB3_2 + SUB3_3";
    	private final String SUB6 = "SUB6_1 + SUB6_2 + SUB6_3";
    	private final int FIRST_LINE = 15;
    	private final int SECOND_LINE = 18;
    	private final int THIRD_LINE = 20;
    	private final int FOURTH_LINE = 28;
    	private final int FIFTH_LINE = 29;
    	private final int SIXTH_LINE = 30;
    	
    	public Inserction() {
    		
    	}
    	
    	private int numInserction(File text){
    		int result = 0;
    		try{
    		      int cont = 0;
    		      FileReader reader = new FileReader("input.txt");
    		      BufferedReader in = new BufferedReader(reader);
    		      while(in.readLine()!=null) cont++;
    		      result = cont / LINES;
    		    }catch(IOException e){
    		    	System.out.println("General Error");
    		    }
    		return result;
    	}
    	
    	private String[] takeVar(String text){
    		String[] var = new String[LINES];
    		try {
    			FileReader fr = new FileReader(text);
    			BufferedReader inFile = new BufferedReader(fr);
    			for(int i = 0; i <= LINES -1; i++) {
    				var[i] = inFile.readLine();
    		}
    			inFile.close();
    		}
    		catch (FileNotFoundException exception){}
    		catch (IOException exception){}
    		return var;
    	}
    	
    	private void subInGen(String[] var,String path) {		
    		try {
    			FileReader fr = new FileReader(path);
    			BufferedReader inFile = new BufferedReader(fr);
    		    FileWriter fw = new FileWriter("D:/eBay/" + var[1] +".txt");
    		    BufferedWriter bw = new BufferedWriter(fw);
    			for(int i = 1; i <= LINES_GEN ; i++) {
    			    String readLine = inFile.readLine();
    				if( i == FIRST_LINE ) {
    				readLine = readLine.replaceAll(SUB6_2, var[0]);
    				bw.append(readLine);
    				bw.newLine();
    				}
    				else {
    				bw.append(readLine);
    				bw.newLine();
    				}
    		}
    			inFile.close();
    		}
    		catch (FileNotFoundException exception){}
    		catch (IOException exception){}
    	}
    
    	public static void main(String[] args) {
    		
    		Inserction a = new Inserction();
    		String esempio = "D:/eBay/lista.txt";
    		String path = "D:/eBay/gen.txt";
    		String[] take = a.takeVar(esempio);
    		a.subInGen(take,path);
    		for (int i = 0; i<= take.length - 1;i++ ) {
    			System.out.println(take[i]);
    		}
    	}
    
    }

  2. #2
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    1,123
    Per copiare un file, puoi semplicemente fare così comunque http://forum.html.it/forum/showthrea...8#post13120818

    BufferedWriter: http://download-llnw.oracle.com/java...redWriter.html


    Comunque il problema potrebbe essere causato da quel LINES_GEN del ciclo, posta meglio il codice però.

    PS: Il codice va postato con i tag CODE ed indentato, così da facilitarne la lettura...com'è ora è veramente molto difficile leggerlo

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    intanto ti invito ad usare i tag code per postare il codice (aiuta noi a leggerlo).
    Poi riguardo alla tua domanda specifica, si c'è una dimensione di default

    dalle API

    The buffer size may be specified, or the default size may be accepted. The default is large enough for most purposes.

    ti consiglio di dare un'occhio alle API qui
    la dimensione del buffer non ricordo in quale API sta, dovresti vedere un po.

    Ti consiglio magari di spezzare, anziché leggere il file tutto insieme leggilo a pezzi e ogni tot fai un flush: se non hai esigenze particolari questa è la soluzione migliore, applicabile al caso generico.

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328

    Moderazione

    Benvenuto nel forum.
    Io colgo l'occasione per invitarti a leggere il Regolamento interno dove puoi trovare tutte le linee guida sul posting delle discussioni.

    Ho corretto io il tuo post aggiungendo gli appositi tag CODE.


    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

  5. #5
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    Non gestisci le eccezioni (almeno in fase di debug devono essere gestite in qualche modo... anche solo facendosi stampare l'eventuale messaggio con:
    codice:
    e.printStackTrace();
    e poi chiudi il "canale" in ingresso da cui leggi, ma non chiudi il canale su cui scrivi. Facci un bel flush per assicurarti che tutto quanto sia possibilmente rimasto nel buffer venga effettivamente "scaricato" e chiudi (intendo sul BufferedWriter): ovvero all'uscita del ciclo for aggiungi

    codice:
    bw.flush();
    bw.close();
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  6. #6
    Ti ringrazio Andrea1979, ora va perfettamente.
    Solo una cosa mi potresti spiegare a cosa serve l'operazione di flush?

    Scusatemi tutti, avevo cercato di mettere il code, ma senza successo.
    Non capiterà più!

    L'Api l'avevo letta, ma non avevo trovato risposta alla mia domanda, comunque!
    Grazie a tutti per le risposte!

  7. #7
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    il flush, lo dice pure l'api, forza lo svuotamento del buffer (in questo caso la scrittura su file). Se devi passare tante info svuotarlo (o forzare lo svuotamento) ti assicura buffer sempre disponibili. Inoltre lo svuotamento del buffer ti assicura che prima della chiusura non siano rimaste info appese

  8. #8
    Ti ringrazio.
    Dato che ci siamo, vorrei chiederti un altra cosa.
    Vorrei sostituire un file letto dal FileReader con uno creato con un FileWriter.
    Ovvero.
    Io leggo lista.txt, creo lista1.txt (che contiene una porzione di lista.txt) [che ho già implementato] , al termine della creazione vorrei che lista.txt sia sostituito da lista1.txt.
    Come posso fare?
    Ho provato a creare istanze di oggetti File con lo stesso pathname ed usare una delete() ed una renameTo(), ma senza successo!
    Spero di esser stato chiaro.

  9. #9
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    Fai sempre le operazioni ad una ad una, si fa meno confusione.
    1. leggi il file, magari ti carichi le strutture temporanee che ti servono per memorizzare i dati
    2. scrittura file.

    sono due funzioni che devono funzionare come si deve in modo indipendente: significa che devi poter fare una lettura di un file e fermarti li e fare una scrittura su file e fermarti li, senza per forza chiamare l'altra. In genere è il mio dummy test, provare la funzionalità, magari con dati cablati, in modo da avere un algoritmo che funziona e POI relativizzarlo.

    nel tuo caso fai
    1. leggi lista.txt, memorizzi i dati in una lista temporanea (che tieni in memoria in pratica). questa lista deve contenere la roba che devi poi riscrivere su file.
    2. chiudi lista.txt (se vuoi lo cancelli ma non è necessario)
    3. apri lista txt in scrittura (dovrebbe cancellare il contenuto)
    4. passi la struttura temporanea in memoria all'interno del file.

    Come vedi la scrittura e la lettura posso farle in maniera indipendente (ho bisogno di una struttura temporanea che mi memorizza i dati).

    A meno che non hai esigenze particolari, lasciali comunque separati, almeno inizialmente sai se fai la scrittura bene o no.

    Spero di essere stata chiara sul procedimento

  10. #10
    Risolto. Grazie...
    Potessi avere la tua astrazione!!

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.