黒馬プログラマー-java基礎-IO流(二)
12542 ワード
——-androidトレーニング、javaトレーニング、コミュニケーションを楽しみにしています!——-
印刷フローの概要:
バイトストリーム印刷ストリームPrintStream
文字ストリーム印刷ストリームPrintWriter
印刷フローの特徴:
A:データを書くだけで、データを読み込んでいません.宛先のみを操作でき、データ・ソースは操作できません.
B:任意のタイプのデータを操作できます.
C:自動リフレッシュが開始された場合、自動的にリフレッシュできます.
D:ファイルのフローを操作できます.
それらのストリームオブジェクトはテキストファイルを直接操作できますか?
FileInputStream
FileOutputStream
FileReader
FileWriter
printStream
printWriter
APIを見て、ストリームオブジェクトの構造方法を調べ、FileタイプとStringタイプのパラメータが同時にあれば、一般的にファイルを直接操作することができます.
ストリームオブジェクト:
基本フロー:ファイルを直接読み書きできる
高度なストリーム:基本ストリームに基づいて他の機能を提供します.
1.任意のタイプのデータを操作できます.
Print()
Pritln()
2.自動リフレッシュを開始するには:
printWriter pw = new PrintWriter(new FileWriter(“a.txt:” ,true)
println()を呼び出す方法でもいいです.
この時は自動リフレッシュだけでなく、データの改行も実現しました.
Println()は次のように等価です.
Write();
newLine();
flush();
印刷ストリームコピーテキストファイル;
IOストリーム標準入出力ストリームの概要と出力文の本質:
Systemクラスの2つのメンバー変数:
Public static final InputStream in"標準"入力ストリーム;
Public static final PrintStream out「標準」出力ストリーム;
inputStream is= System.in;
PrintStream ps= System.out;
System.in標準入力ストリームは、キーボードからデータを取得する
キーボード入力データ:
A:mainメソッドのargs受信パラメータ;
B:Scanner()
Scanner sc = newScanner(System.in);
String s = sc.nextLine();
Int x= sc.nextInt();
C:文字バッファフロー包装標準入力フローにより実現;
BuffereReader br = new BufferedReader(new InputStreamReader(system.in);
ランダムアクセスフロー:
RandomAccessFileクラスはストリームに属さず、Objectクラスのサブクラスである.
しかし、InputStreamとOutputStreamの機能が融合しています.
ランダムアクセスファイルの読み取りと書き込みをサポートします.
PublicRandAccessFile(String name,String mode)
最初のパラメータはファイルパスです.
2番目のパラメータは、ファイルを操作するモードです.
連結フロー:
SequencelnputStreamの概要:
SequenceInputStreamクラスは、複数の入力ストリームを1つの入力ストリームに連結することができ、したがって、このストリームは連結ストリームとも呼ばれる.
SequenceInputStreamの構築方法:
SenquenceInputStream(InputStream s1 , InputStream s2)
SequenceInputStream(Enumeration ExtendsInputStream>e)
1.txt + b.txt = c.txt;
マージフローは、複数のファイルの内容を1つのファイルにコピーします.
SequenceInputStream (Enumeration e)
簡単なレビューから,EnumerationはVectorの1つの方法の戻り値タイプであることが分かった.
Enumeration elements()
シーケンス化フロー:
シーケンス化ストリーム:オブジェクトをストリームのようにテキストファイルに格納したり、ネットワークで転送したりします.オブジェクト-ストリームデータ(ObjectOutputStream)
逆シーケンス化ストリーム:テキストファイル内のストリームオブジェクトデータまたはネットワーク内のストリームオブジェクトデータをオブジェクトに復元します.ストリームデータ--(ObjectInputStream)
Public final void writeObject(Object obj);
NotSerializableExceptionにはシリアル化インタフェースがありません.
クラスはjavaを実現する.io.Serializableインタフェースは、そのシーケンス化機能を開始するために使用され、このインタフェースを実装していないクラスは、そのステータスをシーケンス化または逆シーケンス化することはできません.
このインタフェースには何の方法もありません.このような方法のないインタフェースはタグインタフェースと呼ばれています.
Propertiesコレクション
Propertiesの概要:
Properties属性集合クラスは、IOストリームと組み合わせて使用できる集合クラスです.
Propertiesは、ストリームに保存するか、ストリームからロードすることができます.プロパティリストの各キーとその対応する値は文字列です.
Hashtableサブクラスで、Map集合であることを示します.
Propertiesの特殊な機能の使用:
特殊な機能:
publicObject setProperty(String key,String value):要素の追加
publicString getProperty(String key):要素の取得
publicSet stringPropertyName():すべてのキーのセットを取得する
PropertiesとIOストリームの組み合わせ:
ここの集合はProperties集合でなければなりません.
Public void load(Reader reader):ファイル内のデータをコレクションに読み込む
Public void store(Writer writer, String comments) ;コレクションのデータをファイルに格納する
ケース:ファイルに指定されたキーがあるかどうかを判断し、ある場合は値列を変更します.
印刷フローの概要:
バイトストリーム印刷ストリームPrintStream
文字ストリーム印刷ストリームPrintWriter
印刷フローの特徴:
A:データを書くだけで、データを読み込んでいません.宛先のみを操作でき、データ・ソースは操作できません.
B:任意のタイプのデータを操作できます.
C:自動リフレッシュが開始された場合、自動的にリフレッシュできます.
D:ファイルのフローを操作できます.
それらのストリームオブジェクトはテキストファイルを直接操作できますか?
FileInputStream
FileOutputStream
FileReader
FileWriter
printStream
printWriter
APIを見て、ストリームオブジェクトの構造方法を調べ、FileタイプとStringタイプのパラメータが同時にあれば、一般的にファイルを直接操作することができます.
ストリームオブジェクト:
基本フロー:ファイルを直接読み書きできる
高度なストリーム:基本ストリームに基づいて他の機能を提供します.
1.任意のタイプのデータを操作できます.
Print()
Pritln()
2.自動リフレッシュを開始するには:
printWriter pw = new PrintWriter(new FileWriter(“a.txt:” ,true)
println()を呼び出す方法でもいいです.
この時は自動リフレッシュだけでなく、データの改行も実現しました.
Println()は次のように等価です.
Write();
newLine();
flush();
印刷ストリームコピーテキストファイル;
//
//
// BufferedReader br = new BufferedReader(newFileReader(
// "DataStreamDemo.java"));
// //
// BufferedWriter bw = new BufferedWriter(newFileWriter("Copy.java"));
//
// String line = null;
// while ((line = br.readLine()) != null) {
// bw.write(line);
// bw.newLine();
// bw.flush();
// }
//
// bw.close();
// br.close();
//
//
BufferedReader br = new BufferedReader(new FileReader(
"DataStreamDemo.java"));
//
PrintWriter pw = new PrintWriter(new FileWriter("Copy.java"), true);
String line = null;
while((line=br.readLine())!=null){
pw.println(line);
}
pw.close();
br.close();
}
IOストリーム標準入出力ストリームの概要と出力文の本質:
Systemクラスの2つのメンバー変数:
Public static final InputStream in"標準"入力ストリーム;
Public static final PrintStream out「標準」出力ストリーム;
inputStream is= System.in;
PrintStream ps= System.out;
System.in標準入力ストリームは、キーボードからデータを取得する
キーボード入力データ:
A:mainメソッドのargs受信パラメータ;
B:Scanner()
Scanner sc = newScanner(System.in);
String s = sc.nextLine();
Int x= sc.nextInt();
C:文字バッファフロー包装標準入力フローにより実現;
BuffereReader br = new BufferedReader(new InputStreamReader(system.in);
public static void main(String[] args) throwsIOException {
// //
// InputStream is = System.in;
// // ?
// // 。
// // ?
// // , ?
// //readLine()
// // ?
// //BufferedReader
// // , BufferedReader ,
// // BufferedReader br = new BufferedReader(is);
// // , ,
// // : , , ?
// // , , ?
// // ,
// InputStreamReader isr = newInputStreamReader(is);
// BufferedReader br= new BufferedReader(isr);
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
System.out.println(" :");
String line = br.readLine();
System.out.println(" :" + line);
System.out.println(" :");
// int i = Integer.parseInt(br.readLine());
line = br.readLine();
int i = Integer.parseInt(line);
System.out.println(" :" + i);
}
ランダムアクセスフロー:
RandomAccessFileクラスはストリームに属さず、Objectクラスのサブクラスである.
しかし、InputStreamとOutputStreamの機能が融合しています.
ランダムアクセスファイルの読み取りと書き込みをサポートします.
PublicRandAccessFile(String name,String mode)
最初のパラメータはファイルパスです.
2番目のパラメータは、ファイルを操作するモードです.
private static void read() throws IOException {
//
RandomAccessFile raf = new RandomAccessFile("raf.txt", "rw");
int i = raf.readInt();
System.out.println(i);
// getFilePointer , seek 。
System.out.println(" :" + raf.getFilePointer());
char ch = raf.readChar();
System.out.println(ch);
System.out.println(" :" + raf.getFilePointer());
String s = raf.readUTF();
System.out.println(s);
System.out.println(" :" + raf.getFilePointer());
// , a, ?
raf.seek(4);
ch = raf.readChar();
System.out.println(ch);
}
private static void write() throws IOException {
//
RandomAccessFile raf = new RandomAccessFile("raf.txt", "rw");
// ?
raf.writeInt(100);
raf.writeChar('a');
raf.writeUTF(" ");
raf.close();
}
}
連結フロー:
SequencelnputStreamの概要:
SequenceInputStreamクラスは、複数の入力ストリームを1つの入力ストリームに連結することができ、したがって、このストリームは連結ストリームとも呼ばれる.
SequenceInputStreamの構築方法:
SenquenceInputStream(InputStream s1 , InputStream s2)
SequenceInputStream(Enumeration ExtendsInputStream>e)
1.txt + b.txt = c.txt;
InputStream s1 = new FileInputStream("a.txt");
InputStream s2 = new FileInputStream("b.txt");
SequenceInputStream sins = new SequenceInputStream(s1,s2);
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("c.txt"));
//
byte[] buy = new byte[1024];
int len = 0;
while((len = sins.read(buy))!= -1 ){
bos.write(buy,0 ,len);
}
bos.close();
sins.close();
}
マージフローは、複数のファイルの内容を1つのファイルにコピーします.
SequenceInputStream (Enumeration e)
簡単なレビューから,EnumerationはVectorの1つの方法の戻り値タイプであることが分かった.
Enumeration elements()
Vector v = new Vector();
InputStream s1 = new FileInputStream("a.txt");
InputStream s2 = new FileInputStream("b.txt");
InputStream s3 = new FileInputStream("c.txt");
v.add(s1);
v.add(s2);
v.add(s3);
Enumeration en =v.elements();
SequenceInputStream sins = new SequenceInputStream(en);
BufferedOutputStream bos= new BufferedOutputStream(new FileOutputStream("c.txt"));
// ;
byte[] bys = new byte[1024];
int len = 0;
while((len= sins.read(bys)) != -1){
bos.write(bys,0 ,len);
}
bos.close();
sins.close();
}
シーケンス化フロー:
シーケンス化ストリーム:オブジェクトをストリームのようにテキストファイルに格納したり、ネットワークで転送したりします.オブジェクト-ストリームデータ(ObjectOutputStream)
逆シーケンス化ストリーム:テキストファイル内のストリームオブジェクトデータまたはネットワーク内のストリームオブジェクトデータをオブジェクトに復元します.ストリームデータ--(ObjectInputStream)
Public final void writeObject(Object obj);
NotSerializableExceptionにはシリアル化インタフェースがありません.
クラスはjavaを実現する.io.Serializableインタフェースは、そのシーケンス化機能を開始するために使用され、このインタフェースを実装していないクラスは、そのステータスをシーケンス化または逆シーケンス化することはできません.
このインタフェースには何の方法もありません.このような方法のないインタフェースはタグインタフェースと呼ばれています.
public static void main(String[] args) throws IOException,ClassNotFoundException {
// ,
// ;
write();
read();
}
private static void read() throws IOException, ClassNotFoundException {
// TODOAuto-generated method stub
//
ObjectInputStreamois = new ObjectInputStream(new FileInputStream("oos.txt"));
// ;
Object obj=ois.readObject();
//
ois.close();
System.out.println(obj);
}
private static void write() throws IOException {
// TODOAuto-generated method stub
ObjectOutput oos = new ObjectOutputStream(new FileOutputStream("oos.txt"));
//
person p = new person("dephi",25);
oos.writeObject(p);
// ;
oos.close();
}
:
NotSerializableException:
*
* java.io.Serializable 。 。
* , 。
*
* java.io.InvalidClassException:
* cn.itcast_07.Person; local classincompatible:
* stream classdesc serialVersionUID =-2071565876962058344,
* local class serialVersionUID = -8345153069362641443
*
* ?
* Person , 。
* 100。
* :
* Person.class-- id=100
* wirte : oos.txt -- id=100
* read : oos.txt -- id=100
*
* :
* Person.class-- id=200
* wirte : oos.txt -- id=100
* read : oos.txt -- id=100
* , , 。 ?
* id 。
* java ,class id 。
* , class id 。 , 。
* , , id java , , , id ?
* 。 id ?
* , , , 。
* ?
*
* :
* , , id 。
* , , 。
*
* :
* , 。 ?
* transient
*/
public class Person implements Serializable {
private static final long serialVersionUID = -2071565876962058344L;
private String name;
// private int age;
private transient int age;
// int age;
public Person() {
super();
}
public Person(String name, int age) {
super();
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Person [name=" + name + ",age=" + age + "]";
}
}
Propertiesコレクション
Propertiesの概要:
Properties属性集合クラスは、IOストリームと組み合わせて使用できる集合クラスです.
Propertiesは、ストリームに保存するか、ストリームからロードすることができます.プロパティリストの各キーとその対応する値は文字列です.
Hashtableサブクラスで、Map集合であることを示します.
Propertiesprop = new Properties();
// ;
prop.put("001" , "hello");
prop.put("002", "world");
prop.put("003", "java");
//
Set
Propertiesの特殊な機能の使用:
特殊な機能:
publicObject setProperty(String key,String value):要素の追加
publicString getProperty(String key):要素の取得
publicSet stringPropertyName():すべてのキーのセットを取得する
//
Properties prop = new Properties();
//
prop.setProperty(" ", "30");
prop.setProperty(" ", "40");
prop.setProperty(" ", "50");
// public Set stringPropertyNames():
Set set =prop.stringPropertyNames();
for (String key : set) {
String value = prop.getProperty(key);
System.out.println(key + "---" + value);
}
}
PropertiesとIOストリームの組み合わせ:
ここの集合はProperties集合でなければなりません.
Public void load(Reader reader):ファイル内のデータをコレクションに読み込む
Public void store(Writer writer, String comments) ;コレクションのデータをファイルに格納する
private static void myStore() throws IOException {
//
Properties prop = new Properties();
prop.setProperty(" ", "23");
prop.setProperty(" ", "20");
prop.setProperty(" ", "22");
Writer w = new FileWriter("me.txt");
prop.store(w, "hellworld");
w.close();
}
private static void myload() throws IOException {
// TODOAuto-generated method stub
Properties prop = new Properties();
Reader r = new FileReader("oos.txt");
prop.load(r);
r.close();
System.out.println("prop"+ prop);
}
ケース:ファイルに指定されたキーがあるかどうかを判断し、ある場合は値列を変更します.
Properties prop = new Properties();
Reader r = new FileReader("me.txt");
prop.load(r);
r.close();
//
//Setset = prop.stringPropertyNames();
Set