I File in Java: differenze tra le versioni

Da Bioingegneria Elettronica e Informatica.
(Introduzione)
(Lettura e scrittura di file di testo)
Riga 7: Riga 7:
 
Per leggere dati da una sorgente bisogna collegarla a uno stream, dove leggere le informazioni in modo ordinato. Analogamente, per scrivere dati su una destinazione, bisogna collegarla a uno stream in cui inserire i dati in modo sequenziale. All’inizio di queste operazioni occorre aprire lo stream e alla fine occorre chiuderlo.
 
Per leggere dati da una sorgente bisogna collegarla a uno stream, dove leggere le informazioni in modo ordinato. Analogamente, per scrivere dati su una destinazione, bisogna collegarla a uno stream in cui inserire i dati in modo sequenziale. All’inizio di queste operazioni occorre aprire lo stream e alla fine occorre chiuderlo.
  
== Lettura e scrittura di file di testo ==
+
== Lettura e Scrittura su File ==
Il modo più semplice per leggere un file di testo prevede l'utilizzo di
+
<syntaxhighlight lang="java" line>
L'operazione di apertura di un file, senza la quale non sarebbe possibile effettuare le altre operazioni, consente di accedervi e di associare ad esso uno specifico riferimento (o handle).
+
import java.io.BufferedReader;
Per poter utilizzare un file, quindi aprirlo, si utilizza la funzione ''fopen'' la cui sintassi è la seguente:
+
import java.io.DataOutputStream;
<div align="center">
+
import java.io.File;
<code>''fileID'' = fopen(''filename'',''permission'')</code>
+
import java.io.FileInputStream;
</div>
+
import java.io.FileNotFoundException;
dove ''fileID'' è il riferimento al file restituito dalla funzione ''fopen'' (-1 se l'operazione di apertura non va a buon fine), ''filename'' è la stringa contenente il nome (percorso) del file da leggere/scrivere, mentre ''permission'' permette di definire la modalità di accesso al file. Tutte le specifiche si trovano nella documentazione della funzione [https://it.mathworks.com/help/matlab/ref/fopen.html fopen]; di seguito sono riportate le modalità più comuni di accesso al file.
+
import java.io.FileOutputStream;
 +
import java.io.IOException;
 +
import java.io.InputStreamReader;
 +
import java.io.PrintWriter;
 +
 
 +
public class File_Test {
 +
 
 +
String fileName = "ciao.txt";
 +
 +
public void printFile() {
 +
try {
 +
PrintWriter output = new PrintWriter(fileName);
 +
output.write("casa");
 +
output.close();
 +
} catch (FileNotFoundException e) {
 +
// TODO Auto-generated catch block
 +
e.printStackTrace();
 +
}
 +
}
 +
 +
public String readFromFile() {
 +
String line = null;
 +
try {
 +
InputStreamReader console = new InputStreamReader(System.in);
 +
InputStreamReader file = new InputStreamReader(new FileInputStream(new File("ciao.txt")));
 +
 +
BufferedReader reader = new BufferedReader(console);
 +
line = reader.readLine();
 +
reader.close();
 +
console.close();
 +
 +
 +
} catch (IOException e) {
 +
// TODO Auto-generated catch block
 +
e.printStackTrace();
 +
}
 +
return line;
 +
}
 +
 +
public void writeBinaryFile() {
 +
int[] v = new int[] {1000,2,3,4,5,6,7,8,9,10};
 +
try {
 +
FileOutputStream file = new FileOutputStream(new File("binario.dat"));
 +
DataOutputStream stream = new DataOutputStream(file);
 +
for (int i = 0; i < 10; i++) {
 +
stream.writeInt(v[i]);
 +
}
 +
//stream.close();
 +
file.close();
 +
} catch (Exception e) {
 +
// TODO Auto-generated catch block
 +
e.printStackTrace();
 +
}
 +
}
 +
}
 +
 
 +
</syntaxhighlight>

Versione delle 10:20, 19 mag 2017

Introduzione

Java fornisce classi e metodi per scrivere e leggere dati da files; le tipologie di files che si possono trovare sono sostanzialmente due:

  • file di testo;
  • file binari.

Grazie alle classi fornite da Java, la gestione dell'input/output da file è indipendente dalla piattaforma su cui il programma verrà eseguito; inoltre, le operazioni di I/O sono basate sul concetto di flusso (stream), ovvero una sequenza ordinata di dati che ha una sorgente e una destinazione.

Per leggere dati da una sorgente bisogna collegarla a uno stream, dove leggere le informazioni in modo ordinato. Analogamente, per scrivere dati su una destinazione, bisogna collegarla a uno stream in cui inserire i dati in modo sequenziale. All’inizio di queste operazioni occorre aprire lo stream e alla fine occorre chiuderlo.

Lettura e Scrittura su File

  1. import java.io.BufferedReader;
  2. import java.io.DataOutputStream;
  3. import java.io.File;
  4. import java.io.FileInputStream;
  5. import java.io.FileNotFoundException;
  6. import java.io.FileOutputStream;
  7. import java.io.IOException;
  8. import java.io.InputStreamReader;
  9. import java.io.PrintWriter;
  10.  
  11. public class File_Test {
  12.  
  13. 	String fileName = "ciao.txt";
  14.  
  15. 	public void printFile() {
  16. 		try {
  17. 			PrintWriter output = new PrintWriter(fileName);
  18. 			output.write("casa");
  19. 			output.close();
  20. 		} catch (FileNotFoundException e) {
  21. 			// TODO Auto-generated catch block
  22. 			e.printStackTrace();
  23. 		}
  24. 	}
  25.  
  26. 	public String readFromFile() {	
  27. 		String line = null;
  28. 		try {
  29. 			InputStreamReader console = new InputStreamReader(System.in);	
  30. 			InputStreamReader file = new InputStreamReader(new FileInputStream(new File("ciao.txt")));
  31.  
  32. 			BufferedReader reader = new BufferedReader(console);
  33. 			line = reader.readLine();
  34. 			reader.close();
  35. 			console.close();
  36.  
  37.  
  38. 		} catch (IOException e) {
  39. 			// TODO Auto-generated catch block
  40. 			e.printStackTrace();
  41. 		}
  42. 		return line;
  43. 	}
  44.  
  45. 	public void writeBinaryFile() {
  46. 		int[] v = new int[] {1000,2,3,4,5,6,7,8,9,10};
  47. 		try {
  48. 			FileOutputStream file = new FileOutputStream(new File("binario.dat"));
  49. 			DataOutputStream stream = new DataOutputStream(file);
  50. 			for (int i = 0; i < 10; i++) {
  51. 				stream.writeInt(v[i]);
  52. 			}
  53. 			//stream.close();
  54. 			file.close();
  55. 		} catch (Exception e) {
  56. 			// TODO Auto-generated catch block
  57. 			e.printStackTrace();
  58. 		}
  59. 	}
  60. }