Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    [JAVA] - lettura da file di testo formattato

    Ciao a tutti!!
    Ho un problemino con questo Scanner. Il problema è riportato nel codice del messaggio. A dispetto della lunghezza, è molto più semplice di quanto possa sembrare
    Ecco cosa prevede la traccia originale
    Si vuole implementare un programma per l’indicizzazione di documenti multimediali (testo, audio, video o immagini). Un file di indicizzazione, denominato indice.txt, è costrutto come una lista di documenti con alcuni campi comuni ed altri specifici di ogni tipologia di documento.
    Per tutte tipologie di documenti sono memorizzati, uno per riga, i seguenti dati:
    · Percorso nel file system (es: “C:/Documents/prova.doc”)
    · Dimensione in bytes
    · Data di creazione
    · Data di ultima modifica
    · Descrizione
    · Formatto del file (es.: “mpg”, “avi”, “gif”, “jpeg”, “mp3”, “txt”, “doc”…)
    Inoltre, per i documenti di tipo Audio si memorizza:
    · Durata dell’audio in secondi (ad esempio 500, 3600)
    Per i documenti di tipo Immagine si memorizzano le seguenti informazioni aggiuntive:
    · Larghezza dell’immagine
    · Altezza dell’immagine
    Infine, per i documenti di tipo Video si memorizza:
    · Durata del video in secondi (es.: 500, 3600)
    Nel file indice.txt i dati di ciascun documento è preceduto da un’etichetta che ne indica il tipo (Testo, Audio, Immagine o Video).
    Scrivere un programma che:
    · Data una dimensione soglia, stampi le informazioni relative ai file che hanno una dimensione superiore alla soglia;
    · Dati una dimensione ed un tipo di file, stampi i nomi di tutti i file del tipo dato con una dimensione superiore a quella data.
    Ecco un esempio di file di testo:
    Audio
    C:/Audio/1.mp3
    250000
    10-05-2010
    11-05-2010
    Questo_file_contiene_un_brano_rock
    mp3
    600
    Video
    C:/Video/1.mpg
    2700000
    11-06-2010
    12-06-2010
    Questo_file_contiene_un_video_divertente
    mpg
    3600
    Testo
    C:/Documents/file1
    10000
    15-08-2009
    16-08-2009
    Curriculum_vitae
    doc
    Immagine
    C:/Immagine/cielo.gif
    15000
    09-05-2010
    12-05-2010
    stellato
    gif
    600.58
    454.45
    Testo
    C:/Documents/file2
    14000
    01-01-2011
    08-01-2011
    Progetto_A
    doc
    Immagine
    C:/Immagine/prato.gif
    15700
    08-07-2009
    12-07-2009
    fiorito
    gif
    700
    500
    Ho creato la classe MyFile che gestisce un file generico e le sottoclassi AudioFile, VideoFile, ImageFile e TextFile per gestire i vari file. Il problema invece è con questa classe, IndexReader, che dovrebbe leggermi i dati inseriti in questo file e poi stamparmeli a video.

    codice:
    import java.io.FileReader;
    import java.io.File;
    import java.io.FileNotFoundException;
    import java.io.IOException;
    import java.io.PrintStream;
    import java.util.Scanner;
    import javax.swing.JFileChooser;
    import java.util.HashSet;
    import java.util.Iterator;
    
    /**
     * A class to read file from an input source and generate an hash set of different
     * files
     * @author Simone
     *
     */
    public class IndexReader
    {
    	public static HashSet<AudioFile> audioFiles = new HashSet<AudioFile>();
    	public static HashSet<VideoFile> videoFiles = new HashSet<VideoFile>();
    	public static HashSet<ImageFile> imageFiles = new HashSet<ImageFile>();
    	public static HashSet<TextFile> textFiles = new HashSet<TextFile>();
    	
    	public static void main(String[] args) throws FileNotFoundException, 
    		IOException
    	{
    		//Creo un nuovo oggetto per scegliere il percorso del file
    		JFileChooser chooser = new JFileChooser();
    		FileReader in = null;
    		if (chooser.showOpenDialog(null) == chooser.APPROVE_OPTION)
    		{
    			File selectedFile = chooser.getSelectedFile();
    			in = new FileReader(selectedFile);
    			Scanner input = new Scanner(in);
    			while (input.hasNext())
    				read(input);
    			
    			PrintStream p = System.out;
    			
    			
    			for (AudioFile a : audioFiles)
    				p.println(a);
    			for (VideoFile a : videoFiles)
    				p.println(a);
    			for (ImageFile a : imageFiles)
    				p.println(a);
    			for (TextFile a : textFiles)
    				p.println(a);
    			
    			
    			input.close();
    			in.close();
    		}
    	}
    	
    	/*
    	 * Il metodo per leggere da dal file di input. In questo caso sarà proprio
    	 * il nostro file index.dat
    	 */
    	public static void read(Scanner s)
    	{
    		//Leggo tutte le stringhe predefinite per un file generico
    		if (!s.hasNext()) return;
    		String type = s.next();
    		if (!s.hasNext()) return;
    		String path = s.next();
    		if (!s.hasNextInt()) return;
    		int size = s.nextInt();
    		if (!s.hasNext()) return;
    		String creationData = s.next();
    		if (!s.hasNext()) return;
    		String lastModifiedData = s.next();
    		if (!s.hasNext()) return;
    		String description = s.next();
    		if (!s.hasNext()) return;
    		String format = s.next();
    		
    		/*Se la prima riga dice che è un file audio, allora se la riga successiva
    		* è un intero, recupero la lunghezza in secondi e creo un nuovo oggetto
    		* AudioFile, inserendolo nell'HashMap
    		*/
    		if (type.equalsIgnoreCase("audio"))
    		{
    			if (!s.hasNextInt()) return;
    			int length = s.nextInt();
    			audioFiles.add(new AudioFile(type, path, size, creationData, 
    					lastModifiedData, description, format, length));
    		}
    		//Altrimenti se dice che è un file video, procedo allo stesso modo
    		else if (type.equalsIgnoreCase("video"))
    		{
    			if (!s.hasNextInt()) return;
    			int length = s.nextInt();
    			videoFiles.add(new VideoFile(type, path, size, creationData, 
    					lastModifiedData,	description, format, length));
    		}
    		/*Procedo allo stesso modo con un file immagine
    		* In questo metodo c'è un errore, in quanto se ho nelle specifiche del
    		* file d'ingresso dei numeri con una parte decimale (per esempio 600.58
    		* e 454.45), la lettura del file non continua e non viene aggiunto
    		* nulla all'HashMap imageFiles. Se invece i valori sono interi, tutto
    		* procede alla perfezione
    		*/
    		else if (type.equalsIgnoreCase("immagine"))
    		{
    			if (!s.hasNextLine()) return;
    			double width = s.nextDouble();
    			if (!s.hasNextLine()) return;
    			double height = s.nextDouble();
    			imageFiles.add(new ImageFile(type, path, size, creationData, 
    					lastModifiedData, description, format, width, height));
    		}
    		//Altrimenti è un file di testo
    		else textFiles.add(new TextFile(type, path, size, creationData, 
    				lastModifiedData, description, format));
    	}
    }
    Non capisco perchè non riesce a leggere in input un numero double. Se dò ad un immagine i parametri altezza e larghezza di tipo double (come 600.58
    454.45) non crea l'oggetto; se li passo senza virgola, invece, fila tutto liscio. Come mai?
    Inoltre, vi sembra giusto come procedimento da seguire quello della mia classe IndexReader?

    Grazie mille a tutti per le eventuali risposte

  2. #2

    Re: [JAVA] - lettura da file di testo formattato

    Originariamente inviato da tigerjack89
    Non capisco perchè non riesce a leggere in input un numero double. Se dò ad un immagine i parametri altezza e larghezza di tipo double (come 600.58
    454.45) non crea l'oggetto; se li passo senza virgola, invece, fila tutto liscio. Come mai?
    Inoltre, vi sembra giusto come procedimento da seguire quello della mia classe IndexReader?
    Devi utilizzare la virgola come separatore e non il punto.

  3. #3

    Re: Re: [JAVA] - lettura da file di testo formattato

    Originariamente inviato da VincenzoTheBest
    Devi utilizzare la virgola come separatore e non il punto.
    Grazie per la risposta
    Già provato comunque a sostituire virgola e punto ma continua a non leggerlo.

  4. #4
    WTF??!?!?!
    Ora li legge
    Prima ci avevo provato ma non lo leggeva comunque...hai poteri divinatori sul mio calcolatore??
    Grazie ancora

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.