Java学習ノート(十一)IOフロー
16319 ワード
IOストリームは、始点と終点の秩序あるバイトシーケンスである
IOストリームの分類入力ストリームと出力ストリームプログラムが外部からデータを読み出すことが入力ストリームであり、プログラムがデータを外部に保存することが出力ストリーム である.バイトストリームと文字ストリームのバイト単位の処理ストリームにおけるデータがバイトストリームである、文字単位の処理ストリームにおけるデータが文字ストリーム である.ノードストリームと処理ストリームは、デバイスから直接データを読み書きするノードストリームであり、処理ストリームはノードストリームに対するパッケージ である.
出力内容:
出力内容:
ファイルの内容:
出力結果:
ファイルの内容:
出力内容:
オブジェクトのシーケンス化と逆シーケンス化の前提は、オブジェクトのクラスが
出力内容:
ファイルに内容を印刷
ファイルの内容:
出力結果:
IOストリームの分類
FileInputStream
およびFileOutputStream
FileInputStream
ストリームはファイルの内容をバイト単位で読み出し、FileOutputStream
ストリームはバイト単位でデータをファイルに保存する.この対流クラスはすべてのフォーマットのファイルを読み書きすることができます.import java.io.FileInputStream;
import java.io.IOException;
/**
* FileInputStream
*/
public class Test01 {
public static void main(String[] args) throws IOException {
// FileInputStream , :abcdef
FileInputStream fis = new FileInputStream("/Users/Desktop/test");
// available()
System.out.println(fis.available());
// read()
int bb = fis.read();
System.out.println(bb);
// skip()
// 2
fis.skip(2);
System.out.println(fis.available());
System.out.println(fis.read());
//
fis.close();
}
}
出力内容:
6
97
3
100
import java.io.FileInputStream;
import java.io.IOException;
/**
* FileInputStream
*/
public class Test02 {
public static void main(String[] args) throws IOException {
//
FileInputStream fis = new FileInputStream("/Users/Desktop/test");
// read() , -1
int bb = fis.read();
while (bb != -1) {
System.out.println((char)bb);
bb = fis.read();
}
//
fis.close();
}
}
出力内容:
a
b
c
d
e
f
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Arrays;
/**
* FileInputStream ,
*/
public class Test03 {
public static void main(String[] args) throws IOException {
// , :abcdef
FileInputStream fis = new FileInputStream("/Users/Desktop/test");
// read(byte[] b) bytes ,
byte [] bytes = new byte[4];
int len = fis.read(bytes);
// 4
System.out.println(len);
// :[97, 98, 99, 100]
System.out.println(Arrays.toString(bytes));
//
len = fis.read(bytes);
// 2
System.out.println(len);
// :[101, 102, 99, 100]
System.out.println(Arrays.toString(bytes));
//
len = fis.read(bytes);
// , -1
System.out.println(len);
// :[101, 102, 99, 100]
System.out.println(Arrays.toString(bytes));
//
fis.close();
}
}
import java.io.FileOutputStream;
import java.io.IOException;
/**
* FileOutPutStream
*/
public class Test04 {
public static void main(String[] args) throws IOException {
// ,
//
// FileOutputStream fos = new FileOutputStream("/Users/Desktop/test");
//
FileOutputStream fos = new FileOutputStream("/Users/Desktop/test", true);
// write(int) ,
fos.write(97);
fos.write(98);
fos.write(99);
// write(byte[] b) ,
byte [] bytes = "hello FileOutPutStream".getBytes();
fos.write(bytes);
// write(byte[] b, int off, int len) ,
fos.write(bytes, 0, 5);
//
fos.close();
}
}
ファイルの内容:
abchello FileOutPutStreamhello
BufferedInputStream
およびBufferedOutputStream
BufferedInputStream
バッファ入力バイトストリーム、バイトストリームは8192バイトの配列をバッファとして、プログラムはバッファからデータを読み出して、直接ファイルを操作しませんBufferedOutputStream
出力バイトストリームをバッファリングし、プログラムはデータをバッファに書き込み、他のバイトストリームからバッファからデータをファイルに書き込む.BufferedInputStream
およびBufferedOutputStream
は処理フローに属するimport java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.IOException;
/**
* BufferedInputStream
*/
public class Test01 {
public static void main(String[] args) throws IOException {
m1();
}
public static void m1 () throws IOException {
// , :hello
FileInputStream fis = new FileInputStream("/Users/Desktop/test");
//
BufferedInputStream bis = new BufferedInputStream(fis);
//
int bb = bis.read();
while (bb != -1) {
System.out.println((char)bb);
bb = bis.read();
}
//
bis.close();
}
}
出力結果:
h
e
l
l
o
import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
/**
* BufferedOutputStream
*/
public class Test02 {
public static void main(String[] args) throws IOException {
m2();
}
public static void m2 () throws IOException {
//
FileOutputStream fos = new FileOutputStream("/Users/Desktop/test");
//
BufferedOutputStream bos = new BufferedOutputStream(fos);
//
bos.write(65);
bos.write(66);
bos.write(67);
// ,
bos.flush();
// ,
bos.close();
}
}
ファイルの内容:
ABC
DataInputStream
およびDataOutputStream
以前のFileInputStream
ストリームはファイルから1組の01バイナリシーケンスを読み出し、対応するデータに変換し、FileOutputStream
は対応するデータを01バイナリシーケンスに変換し、ファイルに書き込むDataInputStream
ストリームは直接ファイルの中で整数、小数、文字、文字列、ブールタイプのデータを読み取ることができて、DataOutputStream
は直接整数、小数、文字、文字列、ブールタイプのデータをファイルに書き込むことができますimport java.io.DataOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
/**
* DataOutputStream
*/
public class Test01 {
public static void main(String[] args) throws IOException {
//
FileOutputStream fos = new FileOutputStream("/Users/Desktop/test");
// DataOutputStream
DataOutputStream dos = new DataOutputStream(fos);
// , , DataInputStream
dos.writeInt(123);
dos.writeDouble(3.14);
dos.writeChar(' ');
dos.writeBoolean(false);
dos.writeUTF("hello");
//
dos.close();
}
}
import java.io.DataInputStream;
import java.io.FileInputStream;
import java.io.IOException;
/**
* DataInputStream
*/
public class Test02 {
public static void main(String[] args) throws IOException {
//
FileInputStream fis = new FileInputStream("/Users/Desktop/test");
// DataInputStream
DataInputStream dis = new DataInputStream(fis);
//
int i = dis.readInt();
double d = dis.readDouble();
char c = dis.readChar();
boolean b = dis.readBoolean();
String s = dis.readUTF();
//
dis.close();
//
System.out.println(i);
System.out.println(d);
System.out.println(c);
System.out.println(b);
System.out.println(s);
}
}
出力内容:
123
3.14
false
hello
ObjectInputStream
およびObjectOutputStream
ObjectOutputStream
ストリームオブジェクトをバイナリシーケンスに変換してファイルに書き込むオブジェクトシーケンス化ObjectInputStream
ストリームは、読み込まれたバイナリシーケンスをオブジェクトに変換し、オブジェクト逆シーケンス化と呼ぶオブジェクトのシーケンス化と逆シーケンス化の前提は、オブジェクトのクラスが
Serializable
インタフェースを実現することであり、このインタフェースはフラグインタフェースであり、抽象的な方法はない.import java.io.Serializable;
/**
*
*/
public class Person implements Serializable {
String name;
int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
/**
* ObjectOutputStream
*/
public class Test01 {
public static void main(String[] args) throws IOException {
Person p = new Person(" ", 18);
//
FileOutputStream fos = new FileOutputStream("/Users/Desktop/test");
// ObjectOutputStream
ObjectOutputStream oos = new ObjectOutputStream(fos);
// , , ObjectInputStream
oos.writeObject(p);
//
oos.close();
}
}
import java.io.FileInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
/**
* ObjectInputStream
*/
public class Test02 {
public static void main(String[] args) throws IOException, ClassNotFoundException {
//
FileInputStream fis = new FileInputStream("/Users/Desktop/test");
// ObjectInputStream
ObjectInputStream ois = new ObjectInputStream(fis);
//
Object o = ois.readObject();
//
ois.close();
//
System.out.println(o);
}
}
出力内容:
Person{name=' ', age=18}
PrintStream
ファイルに内容を印刷
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.PrintStream;
/**
* PrintStream
*/
public class Test01 {
public static void main(String[] args) throws FileNotFoundException {
//
FileOutputStream fos = new FileOutputStream("/Users/Desktop/test");
//
PrintStream ps = new PrintStream(fos);
// ,print() println(),
ps.print(" ");
ps.println(" ");
// system.out.println ,
System.setOut(ps);
System.out.println(" , test ");
//
try {
FileInputStream fis = new FileInputStream(" ");
}catch (FileNotFoundException e) {
// test
e.printStackTrace(ps);
}
//
ps.close();
}
}
ファイルの内容:
, test
java.io.FileNotFoundException: (No such file or directory)
at java.base/java.io.FileInputStream.open0(Native Method)
at java.base/java.io.FileInputStream.open(FileInputStream.java:219)
at java.base/java.io.FileInputStream.(FileInputStream.java:157)
at java.base/java.io.FileInputStream.(FileInputStream.java:112)
at printio.Test01.main(Test01.java:28)
FileReader
およびFileWriter
IOストリームクラスのReaderとWriterで終わる文字ストリームは、文字のみの純粋なテキストファイルを読み書きするために使用されます.FileReader
およびFileWriter
は、現在の環境コードと互換性のあるファイルのみを読み書きできます.import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
/**
* FileReader FileWriter
*/
public class Test01 {
public static void main(String[] args) throws IOException {
readChar();
readChar2();
writeChar();
}
//
public static void readChar () throws IOException {
//
FileReader fr = new FileReader("/Users/Desktop/test");
// read() , , -1
int code = fr.read();
while (code != -1) {
System.out.print((char)code);
code = fr.read();
}
//
fr.close();
}
//
public static void readChar2 () throws IOException {
//
FileReader fr = new FileReader("/Users/Desktop/test");
//
char [] chars = new char[1024];
// chars ,
int len = fr.read(chars);
while (len != -1) {
System.out.print(String.valueOf(chars, 0, len));
len = fr.read(chars);
}
//
fr.close();
}
//
public static void writeChar () throws IOException {
//
FileWriter fw = new FileWriter("/Users/Desktop/test");
//
//
fw.write('1');
fw.write('a');
fw.write(' ');
fw.write('#');
//
char [] chars = "hello charArray".toCharArray();
fw.write(chars);
//
fw.write("hello str")
//
fw.close();
}
}
InputStreamReader
およびOutputStreamWriter
符号化が一致しないテキストファイルを読み書きしたい場合は、InputStreamReader
とOutputStreamWriter
を使用します.InputStreamReader
バイトストリームを文字ストリームに変換OutputStreamWriter
は、文字ストリームをバイトストリームに変換することができるimport java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.IOException;
/**
* InputStreamReader OutputStreamWriter
*/
public class Test02 {
public static void main(String[] args) throws IOException {
readGBKFile();
writeGBKFile();
}
// UTF8 GBK
public static void readGBKFile () throws IOException {
//
FileInputStream fis = new FileInputStream("/Users/Desktop/test");
// , GBK
InputStreamReader isr = new InputStreamReader(fis, "GBK");
// ,
int code = isr.read();
while (code != -1) {
System.out.print((char)code);
code = isr.read();
}
//
isr.close();
}
// UTF8 GBK
public static void writeGBKFile () throws IOException {
//
FileOutputStream fos = new FileOutputStream("/Users/Desktop/test");
// , GBK
OutputStreamWriter osw = new OutputStreamWriter(fos);
//
osw.write(" UTF8 , GBK");
//
osw.close();
}
}
BufferedReader
およびBufferedWriter
BufferedWriter
は、出力文字ストリームをバッファリングし、バッファにデータを書き込み、バッファをリフレッシュしたり、バッファがいっぱいになったり、ストリームを閉じたりしたときに、バッファのデータをファイルに書き込むことができます.BufferedReader
入力文字ストリームをバッファリングし、バッファからデータを読み出し、ファイルを直接操作しないimport java.io.IOException;
import java.io.FileWriter;
import java.io.FileReader;
import java.io.BufferedWriter;
import java.io.BufferedReader;
/**
* BufferedReader BufferedWriter
*/
public class Test03 {
public static void main(String[] args) throws IOException {
writerBf();
readBf();
}
//
public static void writerBf () throws IOException {
//
FileWriter fw = new FileWriter("/Users/Desktop/test");
//
BufferedWriter bw = new BufferedWriter(fw);
//
bw.write(" ");
// ,
bw.flush();
//
bw.close();
}
//
public static void readBf () throws IOException {
//
FileReader fr = new FileReader("/Users/Desktop/test");
//
BufferedReader br = new BufferedReader(fr);
// , null
String line = br.readLine();
while (line != null) {
System.out.println(line);
line = br.readLine();
}
//
br.close();
}
}
出力結果: