In tutti gli esempi visti finora abbiamo sempre utilizzato le funzioni interne di Processing per disegnare qualcosa sullo schermo. È possibile, ovviamente, caricare all’interno dei nostri sketch file esterni in vari formati come, ad esempio, font, immagini, file vettoriali, suoni e altro.
Dati gli argomenti che affronteremo a breve, è importante capire come effettuare questa operazione nel modo corretto per evitare di incorrere in problemi soprattutto quando distribuiamo i nostri programmi ad altre persone.
La prima regola fondamentale che dobbiamo sempre tenere a mente è che prima di poter essere utilizzati, i file devono essere caricati dal nostro sketch. Questo avviene ogni volta che lanciamo il programma.
Processing è in grado di caricare file che:
- si trovano all’interno della cartella dello sketch
- si trovano in una cartella qualsiasi sul computer
- si trovano su un server accessibile via internet.
Ciascuna di queste situazioni presenta dei pro e dei contro e non esiste una soluzione che possa andare bene in tutti i casi. La prima opzione è, però, quella più comune.
Tutti i file esterni sono generalmente inseriti in una cartella chiamata data che troviamo all’interno della cartella dello sketch.
Aggiungere file dal menu
Cliccando sul menu Sketch > Add File… si aprirà una finestra di dialogo dove andremo a selezionare il file da inserire.
Drag and drop
La seconda opzione, forse la più comoda, permette di trascinare uno o più file direttamente nella finestra di processing.
Aggiunta manuale
Oppure è possibile aggiungere i file manualmente aprendo la cartella dello sketch dal menu Sketch > Show Sketch Folder, scorciatoia ⌘+K, creando una cartella data (se non esiste) e copiando direttamente i file all’interno di essa.
Consigli
Quando andremo a caricare il o i file è buona regola specificare l’estensione, ad esempio “file.txt” e fare attenzione all’uso delle lettere maiuscole: se il file si chiama immagine.jpg provare a caricare Immagine.jpg, immAgine.jpg o immagine.JPG genererà sempre un errore.
Per rendere il contenuto del file disponibile all’interno dell’interno programma, normalmente si crea una variabile globale al di fuori dei cicli di setup() e draw() come avevo spiegato qui nel paragrafo scopo delle variabili.
Grazie per la risposta. Forse dovrei trasformare la data in numero così da potere selezionare il file che ha il numero più grande. Che ne pensi?
La data è già un numero quindi non c’è bisogno di trasformarla in nulla di diverso. Dopo una breve ricerca credo che il modo migliore per ottenere il risultato e non appesantire troppo il codice su Processing sia fare così (prendo come riferimento l’esempio che ti ho linkato nel commento precedente):
All’inizio del codice aggiungi:
import java.util.Date;
import java.util.Comparator;
import java.util.Arrays;
Dopodiché subito dopo la riga dove viene creato l’array con i file
File[] files = listFiles(path);
e prima del ciclo for che estrae le informazioni sui file aggiungi il seguente codice:Arrays.sort(files, new Comparator() {
public int compare(File f1, File f2) {
return Long.valueOf(f2.lastModified()).compareTo(f1.lastModified());
}
});
Ho fatto una prova veloce ma sembra funzionare senza problemi. Potresti avere problemi di prestazione in base al numero di file che devi comparare.
Con questa funzione l’array files viene ordinato con i file più nuovi al primo posto quindi ti basta, poi, pescare il primo elemento dell’array per essere sicuro di leggere il più recente.
Mi da errori:
Arrays.sort(files, new Comparator() {
alla funzione sort
Mi fai un copia-incolla di tutto il codice? Eventualmente anche su un sito tipo: https://notepad.pw/ per non intasare i commenti :)
https://notepad.pw/s0yesm19
è la prima volta che uso questo notepad.
Il problema è alla riga:
(va la F maiuscola su File)
Grazie, sei super.
Da qui, adesso cerco di arrivare ad avere il solo nome del più recente.
Figurati! Ora non dovrebbe essere troppo difficile ma se hai problemi, scrivimi pure :)
Figurati! Ora non dovrebbe essere troppo complicato… se hai problemi sono comunque qui :)
Ciao Federico, ho un dubbio sull’utilizzo delle librerie da caricare:
import java.io.*;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.File;
se carico la prima è ancora necessario caricare le altre 3?
Grazie anticipatamente
Ciao Angelo, caricando la prima non è necessario aggiungere le altre tre e non vai incontro a problemi/miglioramenti di performance. Di solito, però, si preferisce essere specifici e caricare solo le librerie necessarie (evitando, quindi di mettere * e scrivendo una alla volta tutte le librerie necessarie al tuo programma per funzionare).
Scusate volevo sapere se esiste in italiano qualche testo relativo alla creazione di file in processing.
Grazie
Ciao Giuseppe: che tipo di file devi creare? Magari posso fare un articolo ad hoc per te :)
Scusate qualcuno mi può aiutare a far partire un file audio su Processing? Mi dice duplicate field lezione _6sfile
Ciao Kevin, puoi mettere tutto il codice del tuo sketch?