[UPDATED] Realizzazione programma che apre i files

di il
18 risposte

[UPDATED] Realizzazione programma che apre i files

Buonasera a tutti, sto realizzando un programma che prima scansiona tutti i files in una directory, inserendoli in una Lista, poi dovrebbe scansionare un file della Lista (nel codice ho utilizzato lo 0-esimo elemento, ma ho in mente un ciclo for per scansionare tutti i files della directory). Il problema è il seguente, se i files sono di tipo .txt me li apre senza problemi, mentre se incontra .docx, .doc etc.. mi da errore. Come faccio a fargli scansionare qualsiasi tipo di files, dove posso modificare il codice? Vi ringrazio molto.

import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.List;
import java.util.Objects;
import java.util.Scanner;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class ScannerFiles {

	public static void main(String[] args) {
		Scansion();
	}
	
	public static List FileList() {
		List<String> ElencoFiles = null;
		Path path = Paths.get("C:\\Users\\rober\\Desktop\\TestDir");
		try (Stream<Path> subPaths = Files.walk(path)) {
			List<String> subPathList= subPaths.filter(Files::isRegularFile)
			.map(Objects::toString)
			.collect(Collectors.toList());
			ElencoFiles = subPathList ;
		} catch (IOException e) {
			e.printStackTrace();
		}
		return ElencoFiles;
	}
	
	public static void Scansion() {
		File file = new File((String) FileList().get(0));
		Scanner scan;
		try {
			scan = new Scanner(file);
			System.out.println(scan.nextLine());
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}
	}

}

18 Risposte

  • Re: [UPDATED] Realizzazione programma che apre i files

    bobbyZ ha scritto:


    mentre se incontra .docx, .doc etc.. mi da errore.
    Stai cercando di leggere con Scanner un doc/docx .... NON ha senso. I doc/docx hanno un contenuto "binario" (e anzi, il docx se non sbaglio è strutturalmente uno zip con dentro dei xml e forse altro). Insomma, non sono file di "testo puro" intelleggibili con un blocco note, Scanner di Java o che altro. Per leggere quei formati servono librerie specifiche (e non sono banali).
  • Re: [UPDATED] Realizzazione programma che apre i files

    E quello che ti è stato detto vale per qualsiasi file di tipo strutturato (binario) che trovi nella cartella, ad esempio .exe, .dll, .lib ... e così via.

    Ma mi sembra una cosa così ovvia da non doverla neanche ricordare ...
  • Re: [UPDATED] Realizzazione programma che apre i files

    Vi ringrazio, potreste consigliarmi il nome di una libreria che possa aprire qualsiasi file? Oppure, e forse è più facile, cosa posso inserire per distinguere i file "leggibili con notepad" oppure no?
    Invece che utilizzare librerie complesse, potrei fare questo check...
  • Re: [UPDATED] Realizzazione programma che apre i files

    bobbyZ ha scritto:


    potreste consigliarmi il nome di una libreria che possa aprire qualsiasi file?
    La tua richiesta non ha senso. Non esiste una libreria che apre "tutto"!
    Esistono migliaia di formati di file per: testo, audio, video, dati/db, presentazioni e sicuramente altro.
    Per ciascun contesto bisogna fare valutazioni, scelte, logiche specifiche, ecc...

    Quindi la questione è: COSA vuoi fare? A che livello?

    bobbyZ ha scritto:


    cosa posso inserire per distinguere i file "leggibili con notepad" oppure no?
    Per questo di norma basta vedere l'estensione.
  • Re: [UPDATED] Realizzazione programma che apre i files

    Ma anche ammesso che apri un file .exe, cosa vorresti leggere? E' un file il cui contenuto binario non dice nulla a un utente che lo legge ... che senso ha quello che chiedi?

    Forse vuoi esaminare il contenuto dei file in binario? Vuoi fare un editor esadecimale/binario? Che vuoi fare?
  • Re: [UPDATED] Realizzazione programma che apre i files

    No, non mi serve aprire i file binari. Mi servirebbe aprire tutti i tipi di file che contengono testo puro, come i .txt, .php etc.. ed in genere qualsiasi estensione di file, al cui interno ci sia testo puro. Il problema è che il programma che ho scritto quando incontra un .exe, .lib etc.. va in crash, e la motivazione me l'avete data voi. Non posso mettere degli IF e controllare l'estensione, perchè un file potrebbe avere estensione .pippo e contenere testo puro.
  • Re: [UPDATED] Realizzazione programma che apre i files

    In realtà non hai molti strumenti per fare quello che chiedi ma io non ho capito ancora perché... a che serve una cosa del genere? È fine a se stessa?
  • Re: [UPDATED] Realizzazione programma che apre i files

    bobbyZ ha scritto:


    Mi servirebbe aprire tutti i tipi di file che contengono testo puro, come i .txt, .php etc.. ed in genere qualsiasi estensione di file, al cui interno ci sia testo puro.
    E questo lo puoi fare "ragionevolmente" stabilendo a priori quali estensioni gestire.

    bobbyZ ha scritto:


    Non posso mettere degli IF e controllare l'estensione, perchè un file potrebbe avere estensione .pippo e contenere testo puro.
    Ma potrebbe anche contenere dati binari ...
    Una estensione "pippo" non vuol dire nulla se non c'è una nozione generale su cosa debba essere.

    Ora la questione quindi è:
    a) stabilisci a priori quali estensioni gestire. Puoi anche farlo in maniera configurabile, invece di "cablare" le estensioni nel sorgente usi un file di configurazione per cui se dici "voglio aggiungere .pippo", lo fai in pochi secondi (e senza ricompilare nulla!).

    oppure

    b) fai delle logiche euristiche per cui analizzi prima il contenuto del file per capire se è testo puro oppure no. Non è banale, né facile né immediato e entro certi limiti si potrebbe anche fare.
  • Re: [UPDATED] Realizzazione programma che apre i files

    Grazie per la risposta esauriente, effettivamente quello di cui avrei bisogno è il tuo punto b) ma da quello che dici mi sembra fuori dalle mie possibilità attuali (per ora ho dato solo Programmazione 1 e Programmazione 2 all'Università e non so se incontrerò ancora Java). Pensavo esistesse un modo o una funzione per riconoscere agevolmente un file di testo da uno compilato, invece mi rendo conto che non sia così.
    Quello che sto realizzando, in particolare è questo:
    verificare se all'interno di una particolare directory ci sia un file di testo con all'interno una determinata sequenza di caratteri e non vorrei limitarmi a stabilire a priori le estensioni. Un qualcosa del tipo: è un file di testo? SI -> lo apro e cerco la sequenza. No? -> passo oltre.
  • Re: [UPDATED] Realizzazione programma che apre i files

    bobbyZ ha scritto:


    Quello che sto realizzando, in particolare è questo:
    verificare se all'interno di una particolare directory ci sia un file di testo con all'interno una determinata sequenza di caratteri e non vorrei limitarmi a stabilire a priori le estensioni. Un qualcosa del tipo: è un file di testo? SI -> lo apro e cerco la sequenza. No? -> passo oltre.
    Scusa ma ... lo stai facendo per pura "esercitazione" (tua o richiesta in ambito scolastico/accademico)? Se sì, quale è il problema nello stabilire una "ragionevole" lista di estensioni che contengono testo "puro"?

    E comunque se parliamo di file di testo "puro" c'è anche la questione del encoding (charset).
  • Re: [UPDATED] Realizzazione programma che apre i files

    andbin ha scritto:


    bobbyZ ha scritto:


    Quello che sto realizzando, in particolare è questo:
    verificare se all'interno di una particolare directory ci sia un file di testo con all'interno una determinata sequenza di caratteri e non vorrei limitarmi a stabilire a priori le estensioni. Un qualcosa del tipo: è un file di testo? SI -> lo apro e cerco la sequenza. No? -> passo oltre.
    Scusa ma ... lo stai facendo per pura "esercitazione" (tua o richiesta in ambito scolastico/accademico)? Se sì, quale è il problema nello stabilire una "ragionevole" lista di estensioni che contengono testo "puro"?

    E comunque se parliamo di file di testo "puro" c'è anche la questione del encoding (charset).
    Sto espandendo un esercizio che abbiamo fatto nel precedente corso di programmazione: cercare una particolare sequenza di caratteri in un file .txt, ad esempio il carattere '$" nella prima riga, il carattere 'Z' nella seconda riga e così via... processando vari files, quelli che presentavano quel particolare pattern erano dei "Virus". Era un esercizio molto banale, però ci ha fatto capire il funzionamento di un rudimentale e scarno antivirus. Stavo pensando di espandere quel programmino a tutti i files di una directories ed ecco che mi sono imbattuto nel problema di cui sopra.
  • Re: [UPDATED] Realizzazione programma che apre i files

    Allora puoi aprire qualsiasi file in binario e cercare quei caratteri, senza tenere conto delle righe... ovvero cercando in tutto il file.
  • Re: [UPDATED] Realizzazione programma che apre i files

    bobbyZ ha scritto:


    Sto espandendo un esercizio che abbiamo fatto nel precedente corso di programmazione
    Allora espandilo gradualmente. Metti un array con una lista di estensioni e man mano che ti vengono in mente o ne trovi, aggiungi alla lista.
  • Re: [UPDATED] Realizzazione programma che apre i files

    oregon ha scritto:


    Allora puoi aprire qualsiasi file in binario e cercare quei caratteri, senza tenere conto delle righe... ovvero cercando in tutto il file.
    ma con Scan non posso o si?
Devi accedere o registrarti per scrivere nel forum
18 risposte