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

    [java]Operazioni su file di testo

    amici, sono niubbissimo di java.
    Vorrei sapere se è possibile effettuare delle operazioni sui file. MI trovo a dover creare un programma che, dato in input un testo, in una non meglio specificata modalità, effettua su di esso alcune operazioni.
    L'idea che ho è quella di valorizzare un file e, se possibile appunto, effettuare tali operazioni su di esso trattandolo come un file di testo appunto.
    Le operazioni da fare sono: calcolare il numero di parole, di caratteri ecc ecc
    Inoltre il testo deve essere scritto a linee.
    E' fattibile una cosa del genere oppure mi conviene pensare, per semplicità, ad una struttura dati diversa??
    grazie

  2. #2
    Utente di HTML.it
    Registrato dal
    Dec 2005
    Messaggi
    160
    esistono le classi BufferedReader e BufferedWriter, questi sono i link alle documentazioni:
    http://java.sun.com/j2se/1.4.2/docs/...redReader.html
    http://java.sun.com/j2se/1.4.2/docs/...redWriter.html

    In linea generale:
    Aprire un file e leggere un file

    codice:
    File inputfile=new File("C:\percorso\nomefile.txt");//percorso del file
    if(inputfile.exists()){  //controlla se il file esiste
      BufferedReader in=new BufferedReader(new FileReader(inputfile));
      String riga=in.readLine(); //legge una riga, finchè va a capo
      in.close();
    }
    Scrivere su un file
    codice:
    File outfile=new File("C:\percorso\nomefile.txt");//percorso del file, se esiste lo sovrascrive
    BufferedWriter in=new BufferedWriter(new FileWriter(outfile));
    Stringa towrite="Questa è la stringa da buttare sul file";
    out.write(towrite, 0, towrite.length()); //scrive tutta la riga dall'indice 0 fino alla fine
    out.newLine();//va a capo
    out.close();//chiudili sempre

  3. #3

  4. #4
    grazie per le risposte!!
    Andiamo con il file di testo allora!!

  5. #5
    se dalla documentazione non ho capito male, bisogna importare java.lang.Object;
    giusto??
    Così facendo però ottengo errori "Cannot find symbol Filereader" e stesso errore con "BufferReader" finale.

  6. #6
    Utente di HTML.it
    Registrato dal
    Dec 2005
    Messaggi
    160
    devi importare questi per la lettura

    import java.io.BufferedReader;
    import java.io.File;
    import java.io.FileReader;

    e gli equivalenti per la scrittura

    oppure semplicemente

    import java.io.*;

  7. #7
    grazie della dritta FelixR!!
    Il programma è allo stato embrionale ed è tutto nel main..quindi sta un po' di casino.
    Adesso è l'ora di creare le classi e iniziare a ricomporre seriamente il codice!
    grazie ancora degli aiuti!!

  8. #8
    allora tramite una interfaccia grafica seleziono il file da far analizzare e poi, per l'analisi, lo associo ad un oggetto scanner.
    Come si fa a passare come parametro questo oggetto scanner??
    Fino ad ora ho scritto questo:
    codice:
    import java.io.*;
    import java.util.Scanner;
    import javax.swing.JFileChooser;
    import java.lang.*;
    
    
    
    public class textAnalyzer
    {
    		String nomefile;
    		int sommaCar;
    		int numero_linee;
    		int numero_parole;
    		int palindrome;
    		
    		
    		
    	private textAnalyzer(String file)
    	{
    		nomefile="";
    		sommaCar=0;
    		numero_linee=0;
    		numero_parole=0;
    		palindrome=0;
    	}
    	
    	
    	public int contaCaratteri(InputStream in)
    	{
    		while (in.hasNextLine())
    		{
    			String line=in.nextLine();
    			sommaCar=sommaCar+line.length();	
    					}
    	
    		return sommaCar;
    	}
    	
    	public int contaLinee(InputStream in)
    	{
    		while (in.hasNextLine())
    		{
    			String line=in.nextLine();
    			numero_linee++;
    		}
    	
    		return numero_linee;
    	}
    	
    
    	public static void main (String[] args)	
    	{
    	
    		try
    		{
    			JFileChooser chooser= new JFileChooser();
    			FileReader fr=null;
    			if (chooser.showOpenDialog(null)==JFileChooser.APPROVE_OPTION)
    			{
    				File selectedFile=chooser.getSelectedFile();
    				fr=new FileReader(selectedFile);
    			}
    			
    			Scanner in=new Scanner(fr);		
    			textAnalyzer testo=new textAnalyzer(in);
    			System.out.println ("File" + in + "letto correttamente");
    			System.out.println("Numero di caratteri nel file= "+testo.contaCaratteri(in));
    			System.out.println("Numero di linee nel file= "+testo.contaLinee(in));
    		}
    		catch (IOException exception)
    		{
    				System.out.println ("errore nel file "+exception);
    		}
    	}
    }
    Accetto critiche, suggerimenti e soprattutto qualcuno che riesca ad aiutarmi su come far capire ad ogni singolo costruttore (contacaratteri e contalinee) che deve effettuare la scansione sull'oggetto In che a sua volta già contiene il nome del file selezionato.
    un'ultima cosa: come mai usando JFileChooser, dopo che appare il messaggio che il file è stato letto correttamente, c'è una successione di caratteri e valorizzazioni che non c'entrano nulla con il programma??Le mette di default quella struttura per caso?
    grazie.

  9. #9
    Utente di HTML.it
    Registrato dal
    Dec 2005
    Messaggi
    160
    wow non conoscevo neanche la classe scanner...cmq
    la classe non ti parte vero? Vieni dal C per caso?
    Cmq consigli:
    - i nomi delle classi di solito iniziano per lettera maiuscola
    - non c'è bisogno di dichiarare un costruttore per inizializzare i valori, puoi farlo direttamente nella dichiarazione delle variabili; es:
    codice:
    String nomefile="";
    int sommaCar=0;
    int numero_linee=0;
    int numero_parole=0;
    int palindrome=0;
    - i metodi contaLinee e contaCaratteri potresti farli assieme per ragioni computazionali ma tant'è...
    - quella sequenza strana di caratteri te la stampa qui
    codice:
    System.out.println ("File" + in + "letto correttamente");
    perchè stai stampando un oggetto Scanner, non il nome del file; se vuoi ottenere il nome del file devi stampare selectedFile.getName()

    In una classe, il costruttore è quella funzione che ha per nome lo stesso nome della classe e come parametri di ritorno niente. Viene chiamato come primo metodo quando si costruisce la classe. Puoi definire tanti costruttori che differiscono per i parametri in ingresso(overload di costruttori). Per farne uno che accetta lo scanner basta fare così:
    codice:
    textAnalyzer(Scanner scanner){
      in=scanner;//in è una variabile globale della classe
    }
    a questo punto "in" sarà accessibile da tutti i metodi della classe, quindi puoi togliere i parametri di input e userà lo scanner come variabile che tu hai passato inizialmente al costruttore.

  10. #10
    grazie dei chiarimenti.
    Vengo dal vb e suoi derivati (vbnet2003) e ammetto che è molto traumatico questo passaggio a java per esigenze universitarie.
    Appena torno a casa provvedo a fare le modifiche che mi hai consigliato..

    p.s: comunque hai ragione ho definito erroneamente "costruttori" quelli che in realtà sono i metodi.

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.