Programmeren in Java/In- & uitvoer: verschil tussen versies

Verwijderde inhoud Toegevoegde inhoud
bytebestand
Regel 1:
{{Programmeren in Java}}
=Invoer=
==ViaVan het toetsenbord en het beeldscherm==
===Uitdrukkingen===
*Console.in.readInt();
Regel 25:
}}
 
==ViaVan de commandoregel==
De commandoregel werd vroeger in MS-DOS en in Unix-systemen gebruikt.
Alles wat na "java ProgrammaNaam" (het aanroepen van het programma) komt, wordt beschouwd als een array van strings. Elk element wordt gescheiden door een spatie; opvragen van het i+1-ste element gebeurt met de uitdrukking args[i].
Regel 62:
}</source>
}}
 
==uit een bestand==
==Uit een bestand==
Onderstaande code gaat een bestand lijn voor lijn inlezen en weergeven. Omdat er fouten kunnen optreden (zgn. checked errors), moeten de commando's om een bestand in te lezen tussen een [[Programmeren in Java/Exceptions#Try_en_catch|try-en-catch-uitdrukking]] staan.
Bij het lezen van een bestand, ziet het [[w:Warnierdiagram|Warnierdiagram]] er altijd zo uit:
<pre>
open
read
lijnen(*) {verwerk
(eof) {read
close
</pre>
==Uit byte-bestand==
===Uitdrukkingen===
* FileInputStream lijst = new FileInputStream(bestandsnaam);
* boolean eof (end-of-file)
* int getal = lijst.read();
 
===Voorbeeld===
{{Code|
| Taal=Java
| Titel=invoerB.java
| Code=<source lang=java>import java.io.*;
import tio.*;
 
public class invoerB{
static String bestandsnaam;
public static void main (String[] args) {
if (args.length != 1){
System.out.println ("Geef bestandsnaam, vb.\n> java invoerB bestandB");
}
else {
if (1 == args.length) {
bestandsnaam = args[0];
leesBestandB();
System.out.println("Bestandsnaam:\t" + bestandsnaam);
}
}
}
public static void leesBestandB () {
try {
bestandsnaam += ".bin";
FileInputStream lijst = new FileInputStream(bestandsnaam);
boolean eof = false;
while (!eof) {
int getal = lijst.read();
if (getal == -1) eof = true; // read()-method levert het getal -1 op het einde van de file
else System.out.print(getal + " ");
}
lijst.close();
} catch (FileNotFoundException e) {
System.out.println(e.getMessage());
} catch (IOException e) {
System.out.println(e.getMessage());
}
}
}</source>
}}
 
==Uit tekst-bestand==
===Uitdrukkingen===
* FileReader fileReader = new FileReader(bestandsnaam);
* BufferedReader inFile = new BufferedReader(fileReader);
* (String) lijn = inFile.readLine();
* fileReader.close();
 
===Voorbeeld===
Onderstaande code gaat een bestand lijn per lijn inlezen en weergeven. Omdat er fouten kunnen optreden (zgn. checked errors), moeten de commando's om een bestand in te lezen tussen een [[Programmeren in Java/Exceptions#Try_en_catch|try-en-catch]]-uitdrukking staan.
{{Code|
| Taal=Java
Regel 88 ⟶ 153:
try {
bestandsnaam += ".txt";
FileReader fileReader = new FileReader(bestandsnaam); // Prompt the user and read a file name
BufferedReader inFile = new BufferedReader(fileReader); // Create a BufferedReader object
int lijnNr = 0; // Intialize line number and read the first line of the file
String lijn = inFile.readLine(); //read-ahead
while (lijn != null) {
System.out.println(++lijnNr + ". " + lijn);
lijn = inFile.readLine();
}
Regel 110 ⟶ 175:
 
=Uitvoer=
==byteNaar perhet bytebeeldscherm==
===Uitdrukkingen===
* System.out.print("tekst");
* System.out.println("tekst"); met LF ([[w:linefeed|linefeed]]) en CR ([[w:carriage return|carriage return]]), dus equivalent met System.out.print("tekst" + "\n");
* "\n" = nieuwe lijn, "\t" = tab
===Voorbeeld===
Zie allereerste voorbeeld bovenaan.
 
==Naar byte-bestand==
===Uitdrukkingen===
*FileOutputStream lijst = new FileOutputStream(bestandsnaam, false);
*lijst.write(b[i]); //byte, byte[] of char
*lijst.close();
 
===Voorbeeld===
{{Code|
| Taal=Java
| Titel=uitvoeruitvoerB.java
| Code=<source lang=java>import java.io.*;
public class uitvoeruitvoerB {
static String bestandsnaam;
public static void main (String[] args) {
if (args.length != 1){
System.out.println ("Geef bestandsnaam, vb.\n> java uitvoeruitvoerB bestandbestandB");
}
else {
if (1 == args.length) {
bestandsnaam = args[0];
charbyte[] letterscijfers = {'a'7, '\t'19, 'b'4, '\n'42, 'c'33, 11}; // weg te schrijven data
schrijfBestand(cijfers);
System.out.println(" weggeschreven naar:\t" + bestandsnaam);
}
}
}
public static void schrijfBestand (byte[] b){
try {
bestandsnaam += ".bin";
FileOutputStream lijst = new FileOutputStream(bestandsnaam); //een nieuwe file aanmaken
for (int i=0; i<b.length; i++){ //alle cijfers wegschrijven
lijst.write(b[i]);
System.out.print(b[i] + " ");
}
lijst.close();
}
catch (FileNotFoundException e) {
System.out.println(e.getMessage());
} catch (IOException e) {
System.out.println(e.getMessage());
}
}
}</source>
}}
Als je dit bestand bekijkt met een teksteditor, zie je plots tekens verschijnen. Een byte stelt via de [[w:ASCII (tekenset)|ASCII]]-codering namelijk ook een teken voor. Zo is '*' = 42 en '!' = 33.
 
Dezelfde uitvoer is dan ook toepasbaar voor tekens (char):
{{Code|
| Taal=Java
| Titel=uitvoerC.java
| Code=<source lang=java>import java.io.*;
public class uitvoerC {
static String bestandsnaam;
public static void main (String[] args) {
if (args.length != 1){
System.out.println ("Geef bestandsnaam, vb.\n> java uitvoerC bestandC");
}
else {
if (1 == args.length) {
bestandsnaam = args[0];
byte[] letters = {1,2,3}; // weg te schrijven data
schrijfBestand(letters);
System.out.println("Weggeschrevenweggeschreven naar:\t" + bestandsnaam);
}
}
}
public static void schrijfBestand (charbyte[] w){
try {
bestandsnaam += ".txt";
//een nieuwe file aanmaken
FileOutputStream deLijstlijst = new FileOutputStream(bestandsnaam, false); //true = append
//alle lottocijfers wegschrijven
for (int i=0; i<w.length; i++) //bij byte[] ook: deLijst.write(b,0,b.length);{
deLijstlijst.write(w[i]); //byte, char, byte[] of char
deLijst System.closeout.print(w[i] + " ");
}
// lijst.write(b,0,b.length); enkel voor byte[]
lijst.close();
}
catch (FileNotFoundException e) {
Regel 156 ⟶ 279:
* Bestanden schrijven
-->
 
 
 
Informatie afkomstig van https://nl.wikibooks.org Wikibooks NL.
Wikibooks NL is onderdeel van de wikimediafoundation.