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

    [JAVA] - leggere da file di testo formattato [VERY LONG]

    Ragazzi oggi ho questo problema provando a svolgere una delle tante prove di esame. Essendo impostate tutte più o meno alla stessa maniera, chiedo consigli a voi che ne sapete molto più di me perchè davvero non riesco a venirne a capo.
    Scusate se utilizzerò più post, è solo per rendere il tutto più leggibile e non creare troppa confusione.
    Ringrazio già da ora tutti coloro che vorranno dedicarmi un pò di tempo ed aiutarmi con questo progetto, che per me è complicato ma immagino che sia solo apparenza.
    Si accettano tutti gli insulti, puchè utili XD

    Ecco la mia traccia
    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.
    Il file da cui leggere ha questa struttura. L'ho chiamato indice.dat ma è lo stesso immagino. In ogni caso non riesco ad aggiungere il file al JavaProject e non capisco il perchè; il file viene messo nella cartella del JavaProject ma non compare nella cascata del progetto di Eclipse.
    codice:
    Audio
    C:/Audio/1.mp3
    250000
    10-05-2010
    11-05-2010
    Questo_file_contiene_un_brano_dance
    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.28
    454.28
    Audio
    C:/Audio/2.mp3
    300000
    14-09-2009
    17-09-2009
    Questo_file_contiene_un_brano_house
    mp3
    800
    Video
    C:/Video/2.mpg
    180000000
    13-12-2010
    20-12-2010
    Questo_file_contiene_un_film
    mpg
    2500
    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

  2. #2

    MyFile (classe generica di un file)

    codice:
    import java.io.PrintStream;
    /**
     * A class to manage files
     * @author Simone
     *
     */
    public class MyFile
    {
    	public MyFile()
    	{
    		/*
    		 * Non inizializza nulla. Il mio primo dubbio è proprio su questo costrut-
    		 * tore: non capisco perchè devo creare un costruttore vuoto, senza pare-
    		 * metri espliciti. Dall'altro lato, se non lo creo, tutte le sottoclassi
    		 * presentano un errore
    		 */
    		
    	}
    	
    	/*
    	 * Costruisce un nuovo file coi parametri stabiliti nella traccia
    	 * @param type tipo file (audio, testo, immagine, video)
    	 * @param path percorso file
    	 * @param size grandezza file
    	 * @param creationData data creazione
    	 * @param lastModifiedData data ultima modifica
    	 * @param description descrizione
    	 * @param format formato
    	 */
    	public MyFile(String type, String path, int size, String creationData,
    			String lastModifiedData, String description, String format)
    	{
    		this.type = type;
    		this.path = path;
    		this.size = size;
    		this.creationData = creationData;
    		this.lastModifiedData = lastModifiedData;
    		this.description = description;
    		this.format = format;
    	}
    
    	/*
    	 * da qui in avanti ci sono tutti i metodi getters e setters dei costruttori
    	 * della classe
    	 */
    
    	public String getType()
    	{
    		return type;
    	}
    	public String getPath()
    	{
    		return path;
    	}
    	public int getSize()
    	{
    		return size;
    	}
    	public String getCreationData()
    	{
    		return creationData;
    	}
    	public String getLastModifiedData()
    	{
    		return lastModifiedData;
    	}
    	public String getDescription()
    	{
    		return description;
    	}
    	public String getFormat()
    	{
    		return format;
    	}
    
    	public void setType(String type)
    	{
    		this.type = type;
    	}
    
    	public void setPath(String path)
    	{
    		this.path = path;
    	}
    
    	public void setSize(int size)
    	{
    		this.size = size;
    	}
    
    	public void setCreationData(String creationData)
    	{
    		this.creationData = creationData;
    	}
    
    	public void setLastModifiedData(String lastModifiedData)
    	{
    		this.lastModifiedData = lastModifiedData;
    	}
    
    	public void setDescription(String description)
    	{
    		this.description = description;
    	}
    
    	public void setFormat(String format)
    	{
    		this.format = format;
    	}
    
    	@Override
    	public String toString()
    	{
    		return type + "\n" + path + "\n" + size + "\n" + creationData + "\n" 
    		+ lastModifiedData + "\n" + description + "\n" + format;
    	}
    
    	@Override
    	public int hashCode()
    	{
    		int h = 0;
    		h = HASH_MULTIPLIER * type.hashCode() + path.hashCode();
    		h = HASH_MULTIPLIER * h + format.hashCode();
    		return h;
    	}
    
    	@Override
    	public boolean equals(Object o)
    	{
    		if (o == null) return false;
    		if (o.getClass() != this.getClass()) return false;
    		MyFile file = (MyFile) o;
    
    		return (this.type.equals(file.type) && this.path.equals(file.path)
    				&& this.format.equals(file.format));
    	}
    
    	/**
    	 * Print on an object of PrintStream
    	 * @param p PrintStream object
    	 */
    	public void print(PrintStream p)
    	{
    		p.println(type);
    		p.println(path);
    		p.println(size);
    		p.println(creationData);
    		p.println(lastModifiedData);
    		p.println(description);
    		p.println(format);
    	}
    
    
    
    	private String type;
    	private String path;
    	private int size;
    	private String creationData;
    	private String lastModifiedData;
    	private String description;
    	private String format;
    
    	private static final int HASH_MULTIPLIER = 31;
    }

  3. #3

    AudioFile - VideoFile

    codice:
     
    import java.io.PrintStream;
    
    /**
     * A class to manage audio files
     * @author Simone
     *
     */
    public class AudioFile extends MyFile
    {	
    	public AudioFile(String type, String path, int size, String creationData,
    			String lastModifiedData, String description, String format, int length)
    	{
    		super.setType(type);
    		super.setPath(path);
    		super.setSize(size);
    		super.setCreationData(creationData);
    		super.setLastModifiedData(lastModifiedData);
    		super.setDescription(description);
    		super.setFormat(format);
    		this.length = length;
    	}
    
    	public int getLength()
    	{
    		return length;
    	}
    	
    	@Override
    	public String toString()
    	{
    		return super.toString() + "\n" + length;
    	}
    
    	@Override
    	public void print(PrintStream p)
    	{
    		super.print(p);
    		p.println(length);
    	}
    
    	private int length;
    }
    codice:
    import java.io.PrintStream;
    
    /**
     * A class to manage video files
     * @author Simone
     *
     */
    public class VideoFile extends MyFile
    {
    	public VideoFile(String type, String path, int size, String creationData,
    			String lastModifiedData, String description, String format, int length)
    	{
    		super.setType(type);
    		super.setPath(path);
    		super.setSize(size);
    		super.setCreationData(creationData);
    		super.setLastModifiedData(lastModifiedData);
    		super.setDescription(description);
    		super.setFormat(format);
    		this.length = length;
    	}
    
    	public int getLength()
    	{
    		return length;
    	}
    	
    	@Override
    	public String toString()
    	{
    		return super.toString() + "\n" + length;
    	}
    
    	@Override
    	public void print(PrintStream p)
    	{
    		super.print(p);
    		p.println(length);
    	}
    
    	private int length;
    }

  4. #4

    ImageFile-TextFile

    codice:
    import java.io.PrintStream;
    
    /**
     * A class to manage image files
     * @author Simone
     *
     */
    public class ImageFile extends MyFile
    {
    	public ImageFile(String type, String path, int size, String creationData,
    			String lastModifiedData, String description, String format, int width,
    			int height)
    	{
    		super.setType(type);
    		super.setPath(path);
    		super.setSize(size);
    		super.setCreationData(creationData);
    		super.setLastModifiedData(lastModifiedData);
    		super.setDescription(description);
    		super.setFormat(format);
    		this.height = height;
    		this.width = width;
    	}
    
    	public int getHeight()
    	{
    		return height;
    	}
    	public int getWidth()
    	{
    		return width;
    	}
    
    	@Override
    	public String toString()
    	{
    		return super.toString() + "\n" + width + "\n" + height;
    	}
    
    	@Override
    	public void print(PrintStream p)
    	{
    		super.print(p);
    		p.println(width);
    		p.println(height);
    	}
    
    	private int height;
    	private int width;
    }
    codice:
    /**
     * A class to manage files different from audio, video or image
     * @author Simone
     *
     */
    public class TextFile extends MyFile
    {
    
    	public TextFile()
    	{
    		super();
    	}
    
    	public TextFile(String type, String path, int size, String creationData,
    			String lastModifiedData, String description, String format)
    	{
    		super(type, path, size, creationData, lastModifiedData, description, format);
    	}
    
    }

  5. #5

    FileReader

    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 a data set
     * @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);
    			
    			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)
    	{
    		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();
    
    		if (type.equalsIgnoreCase("audio"))
    		{
    			if (!s.hasNextInt()) return;
    			int length = s.nextInt();
    			audioFiles.add(new AudioFile(type, path, size, creationData, lastModifiedData,
    					description, format, length));
    		}
    		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));
    		}
    		else if (type.equalsIgnoreCase("immagine"))
    		{
    			if (!s.hasNextInt()) return;
    			int width = s.nextInt();
    			if (!s.hasNextInt()) return;
    			int height = s.nextInt();
    			imageFiles.add(new ImageFile(type, path, size, creationData, lastModifiedData,
    					description, format, width, height));
    		}
    
    		else textFiles.add(new TextFile(type, path, size, creationData, lastModifiedData,
    				description, format));
    	}
    }

  6. #6
    ho migliorato le varie classi come descritto già grosso modo in questo 3d
    Inoltre, ho modificato il file IndexReader.java in questo modo

    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 a data 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));
    	}
    }

  7. #7
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472

    Moderazione

    Ho chiuso la discussione poiché questa non è la modalità corretta di proporre e portare avanti un thread: non si può pubblicare tutto il codice sorgente di un programma chiedendo un aiuto generico o non fornendo un problema circostanziato, bensì va posto un quesito o un problema ben specifico, fornendo i dettagli relativi (errore o comportamento anomalo riscontrato) e riportare solo le parti di codice sorgente utili a identificare il problema e permettere a chi vuole dare una mano di risolverlo.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

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.