Teksta apstrādes programmās standartizvadi (STDOUT) parasti lieto, lai izvadītu derīgo galarezultātu, ko var redirektēt ierakstīšanai failā. Savukārt kļūdu izvadi (STDERR) lieto kļūdu un citu paziņojumu izvadei, kas nepieder pie programmas derīgā galarezultāta. Piemērs komandrindai (gan UNIX, gan DOS), kas redirektē programmas "mypackage.SomeClass" izvadi failā out.txt:
java mypackage.SomeClass arg1 arg2 > out.txt
Ja izvade (piemēram, System.out) nav redirektēta failā (t.i. komandrindas beigās nav rakstīts "> ..."), tad STDOUT un STDERR paziņojumi var parādīties uz konsoles kaut kādā secībā (plūsma STDOUT turklāt var nebūt hronologjiski saskaņota ar STDOUT, ja izvade tiek buferizēta).
Eclipse konsole STDOUT izvadi drukā melnā krāsā, bet STDERR izvadi - sarkanā.
1 import java.io.*;
2
3 public class KeyboardInput {
4 public static void main (String args[]) {
5 String s;
6 // Izveidot "BufferedReader" instanci, kura
7 // lasa katru rindu no klaviatūras
8 InputStreamReader ir = new InputStreamReader(System.in);
9 BufferedReader in = new BufferedReader(ir);
10
11 System.out.println("Unix: Ievades beigas: ctrl-d vai ctrl-c.");
12 System.out.println("Windows: Ievades beigas: ctrl-z.");
13 try {
14 // Nolasām rindiņu un atbalsojam to uz konsoles
15 s = in.readLine();
16 while ( s != null ) {
17 System.out.println("Read: " + s);
18 s = in.readLine();
19 }
20
21 // Aizver "BufferedReader"
22 in.close();
23 } catch (IOException e) { // Noķeram I/O izņēmumus
24 e.printStackTrace();
25 }
26 }
27 }
File myDir = new File("MyDocs");
myFile = new File(myDir, "myfile.txt");
File objekti ir piemēroti augsta līmeņa manipulācijām ar failiem un direktorijām (direktoriju satura uzskaitīšanai, faila parametru noskaidrošanai, utml.). Lai lasītu vai rakstītu faila saturu, ir jāizmanto ievades/izvades plūsmas (InputStream/OutputStream apakšklases) vai arī simbolisko datu ievade/izvade (Reader/Writer apakšklases) - par tām stāstīts tālāk šajā materiālā.
File vārdu noskaidrošana:
String getName() String getPath() String getAbsolutePath() String getParent() boolean renameTo(File newName)
File pārbaudes:
boolean exists() boolean canWrite() boolean canRead() boolean isFile() boolean isDirectory() boolean isAbsolute();
Citas metodes:
long lastModified() long length() boolean delete()
Direktoriju utilītmetodes:
boolean mkdir() String[] list()
Failu ievade:
Failu izvade:
1 import java.io.*;
2 public class ReadFile {
3 public static void main (String[] args) {
4 // Izveido "File" objektu
5 File file = new File(args[0]);
6
7 try {
8 // Izveido buferizētu lasītāju, lai lasītu pa rindiņām
9 BufferedReader in = new BufferedReader(new FileReader(file));
10 String s;
11
12 // Nolasa rindiņu un atbalso to uz ekrāna
13 s = in.readLine();
14 while ( s != null ) {
15 System.out.println("Read: " + s);
16 s = in.readLine();
17 }
18 // Aizver buferizētu lasītāju, kurš aizver arī faila lasītāju
19 in.close();
20
21 } catch (FileNotFoundException e1) {
22 // Ja fails neeksistē
23 System.err.println("File not found: " + file);
24
25 } catch (IOException e2) {
26 // Apstrādā citus I/O izņēmumus
27 e2.printStackTrace();
28 }
29 }
30 }
1 import java.io.*;
2
3 public class WriteFile {
4 public static void main (String[] args) {
5 // Izveido "File" instanci
6 File file = new File(args[0]);
7
8 try {
9 // Izveido buferizētu lasītāju lasīšanai no standartievades
10 BufferedReader in
11 = new BufferedReader(new InputStreamReader(System.in));
12 // Izveido 'PrintWriter' instanci šim failam
13 PrintWriter out
14 = new PrintWriter(new FileWriter(file));
15 String s;
16
17 System.out.print("Ievadiet tekstu ");
18 System.out.println("[Ievades beigas: Ctrl-z]");
19
20 // Lasīt pa rindiņām un izvadīt tās failā
21 while ((s = in.readLine()) != null) {
22 out.println(s);
23 }
24
25 // Aizvērt konsoles lasītāju un faila rakstītāju
26 in.close();
27 out.close();
28
29 } catch (IOException e) {
30 // Apstrādā I/O izņēmumus
31 e.printStackTrace();
32 }
33 }
34 }
| Byte Streams | Character Streams | |
| Source Streams | InputStream | Reader |
| Sink Streams | OutputStream | Writer |
Trīs galvenās read metodes:
int read() int read(byte[] buffer) int read(byte[] buffer, int offset, int length)
Citas metodes:
void close() int available() skip(long n) boolean markSupported() void mark(int readlimit) void reset()
Izmantojot mark/reset metodes, no plūsmas zināmu gabalu var nolasīt atkārtoti.
Trīs galvenās write metodes:
void write(int c) void write(byte[] buffer) void write(byte[] buffer, int offset, int length)
Citas metodes:
void close() void flush()
Trīs galvenās read metodes:
int read() int read(char[] cbuf) int read(char[] cbuf, int offset, int length)
citas metodes:
void close() boolean ready() skip(long n) boolean markSupported() void mark(int readAheadLimit) void reset()
Galvenās write metodes:
void write(int c) void write(char[] cbuf) void write(char[] cbuf, int offset, int length) void write(String string) void write(String string, int offset, int length)
Citas metodes:
void close() void flush()
| Tips | Simbolu plūsmas | Baitu plūsmas |
| Fails | FileReader FileWriter | FileInputStream FileOutputStream |
| Atmiņa: Masīvs | CharArrayReader CharArrayWriter | ByteArrayInputStream ByteArrayOutputStream |
| Atmiņa: Strings | StringReader StringWriter | |
| Truba | PipedReader PipedWriter | PipedInputStream PipedOutputStream |
Šī programma veic vienkāršu failu kopēšanu:
java TestNodeStreams file1 file2
1 import java.io.*;
2
3 public class TestNodeStreams {
4 public static void main(String[] args) {
5 try {
6 FileReader input = new FileReader(args[0]);
7 FileWriter output = new FileWriter(args[1]);
8 char[] buffer = new char[128];
9 int charsRead;
10
11 // nolasa pirmo buferi
12 charsRead = input.read(buffer);
13
14 while ( charsRead != -1 ) {
15 // raksta buferi izejas failā
16 output.write(buffer, 0, charsRead);
17
18 // nolasa nākošo buferi
19 charsRead = input.read(buffer);
20 }
21
22 input.close();
23 output.close();
24 } catch (IOException e) {
25 e.printStackTrace();
26 }
27 }
28 }
Simbolu lasīšana no failiem ar FileReader notiek platformas "noklusētajā kodējumā". Ja gribam konkrētu kodējumu, Reader instance jākonstruē no FileInputStream.
java TestBufferedStreams file1 file2
1 import java.io.*;
2
3 public class TestBufferedStreams {
4 public static void main(String[] args) {
5 try {
6 FileReader input = new FileReader(args[0]);
7 BufferedReader bufInput = new BufferedReader(input);
8 FileWriter output = new FileWriter(args[1]);
9 BufferedWriter bufOutput = new BufferedWriter(output);
10 String line;
11
12 // nolasa pirmo rindiņu
13 line = bufInput.readLine();
14
15 while ( line != null ) {
16 // write the line out to the output file
17 bufOutput.write(line, 0, line.length());
18 bufOutput.newLine();
19
20 // nolasa nākamo rindiņu
21 line = bufInput.readLine();
22 }
23
24 bufInput.close();
25 bufOutput.close();
26 } catch (IOException e) {
27 e.printStackTrace();
28 }
29 }
30 }

| Tips | Simbolu plūsmas | Baitu plūsmas |
| Buferizācija | BufferedReader BufferedWriter BufferedOutputStream | BufferedInputStream |
| Filtrēšana | FilterReader FilterWriter FilterOutputStream | FilterInputStream |
| Pārveidošana starp baitiem un simboliem | InputStreamReader OuptutStreamWriter | |
| Objektu serializācija | ObjectInputStream ObjectOutputStream | |
| Datu pārveidošana | DataInputStream DataOutputStream | |
| Skaitīšana | LineNumberReader | LineNumberInputStream |
| Iepriekšēja Skatīšanās | PushbackReader | PushbackInputStream |
| Drukāšana teksta failā | PrintWriter | PrintStream |




Diskusiju tēmas: