Java——IO總結2

 

1.字符流

 

1.1InputStreamReader

/**

 * InputStreamReader 是讀取字符類

 * 讀取文件以字符爲單位,底層還是字節流

 * */

 

package day23.reader;

 

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.IOException;

import java.io.InputStreamReader;

 

public class InputStreamReaderDemo {

public static void main(String[] args) throws IOException {

//創建一個字符流對象

//1.1創建字節流對象,關聯到要操作的文件

FileInputStream in=new FileInputStream("C:\\Users\\Administrator\\Desktop\\Java1807\\day01\\FirstDemo.java");

//1.2創建字符流對象,關聯字節流

InputStreamReader reader=new InputStreamReader(in);

//2.讀取字符

/*//讀取單個字符

System.out.println(reader.read());

//讀取一串字符,把字符存在字符數組中

char []cbuf=new char[10];

int len=reader.read(cbuf);

System.out.println(len);

//從流中讀取一定長度的字符,存到緩存區,從某個位置開始,讀取長度

//reader.read(cbuf, offset, length);*/

//初始化一個緩存區

char[]cbuf=new char[10];

//設置長度

int len=0;

//循環讀取數據

while ((len=reader.read(cbuf))!=-1) {

//處理接受的數據

System.out.print(new String(cbuf,0,len));

}

//3.關閉流

in.close();

reader.close();

}

}

輸出結果:

 

1.2OutoutStreamWriter

 

package day23.writer;

 

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.OutputStreamWriter;

 

public class OutputStreamWriterDemo {

//寫出字節流

public static void main(String[] args) throws IOException {

// 初始化一個字符流對象

OutputStreamWriter writer=new OutputStreamWriter(new FileOutputStream("C:\\Users\\Administrator\\Desktop\\111.txt",true));

//寫操作

//寫單個字符

writer.write("q");

//寫入一個字符數組

char[]cbuf={'s','d','c','a','l','m'};

writer.write(cbuf);

//3.刷入數組,從那個位置開始到哪個位置結束

writer.write(cbuf, 1, 4);

//寫入一個字符串

writer.write("Hello");

//刷入

writer.flush();

//關閉

writer.close();

}

}

輸出結果:

1.3FileReader

/**

 * FileReader是InputStreamReader的子類

 * 只能使用平臺默認的編碼格式

 * */

 

package day23.reader;

 

import java.io.FileReader;

import java.io.IOException;

 

public class FileReaderDemo {

public static void main(String[] args) throws IOException {

//創建FileReader對象

FileReader reader=new FileReader("C:\\Users\\Administrator\\Desktop\\111.txt");

//讀取字符

//聲明一個緩衝區

char[]cbuf=new char[10];

int len=0;

//循環讀取字符

while ((len=reader.read(cbuf))!=-1) {

//處理字符

System.out.print(new String(cbuf,0,len));

}

//關閉

reader.close();

}

}

輸出結果:

1.4FileWriter

 

package day23.writer;

 

import java.io.FileWriter;

import java.io.IOException;

 

//FileWriter是OutputStreamWriter的子類

public class FileWriterDemo {

 

public static void main(String[] args) throws IOException {

// 初始化一個FileWriter對象

FileWriter writer=new FileWriter("C:\\Users\\Administrator\\Desktop\\123.txt",false);

//寫操作

writer.write("This is  a FileWriter!");

//刷入

writer.flush();

//關閉

writer.close();

}

}

輸出結果:

1.5BufferedReader

/**

 * BufferedReader是Reader的子類

 * 最大特點就是每次可以讀取到一行,一行的定義就是讀取到換行符

 * */

 

package day23.reader;

 

import java.io.BufferedReader;

import java.io.FileNotFoundException;

import java.io.FileReader;

import java.io.IOException;

import java.io.InputStreamReader;

 

public class BuferedReaderDemo {

public static void main(String[] args) throws IOException {

//初始化一個對象

//使用手動設置編碼格式

//InputStreamReader input=new InputStreamReader(in, dec);

//使用默認的編碼個打

FileReader reader=new FileReader("C:\\Users\\Administrator\\Desktop\\Java1807\\day01\\FirstDemo.java");

BufferedReader br=new BufferedReader(reader);

//讀取數據

/*//讀取單個字符

System.out.println(br.read());

//讀取多個字符

char[]cbuf=new char[5];

System.out.println(br.read(cbuf));*/

//讀取行

String str=null;

while (br.ready()) {

str=br.readLine();

System.out.println(str);

}

//關閉流

br.close();

reader.close();

}

}

輸出結果:

1.6BufferedWriter

/**

 * BufferedWriter是Writer的子類

 * 可以寫入一行數據,可以換行

 * */

 

package day23.writer;

 

import java.io.BufferedWriter;

import java.io.FileWriter;

import java.io.IOException;

import java.io.OutputStreamWriter;

 

import javax.swing.text.AbstractDocument.BranchElement;

 

public class BufferedWriterDemo {

 

public static void main(String[] args) throws IOException {

// 創建BufferedWriter對象

//創建一個Writer子類對象

//可以設置編碼集

//OutputStreamWriter osw=new OutputStreamWriter(out, enc);

//默認編碼集

FileWriter writer=new FileWriter("C:\\Users\\Administrator\\Desktop\\222.txt",true);

BufferedWriter bw=new BufferedWriter(writer);

//寫數據

String str="哎呦,不錯哦!";

bw.write(str);

//換行

bw.newLine();

//刷入

bw.flush();

//關閉流

writer.close();

bw.close();

}

 

}

輸出結果:

2.二進制I/O流

2.1DataInputStream

/**

 * DataInputStream

 * 二進制輸入流,可以讀取文件,將文件中對應的數據類型還原成java的基本數據類型

 * */

 

package day24.io;

 

import java.io.DataInputStream;

import java.io.FileInputStream;

import java.io.IOException;

 

public class DataInputStreamDemo {

public static void main(String[] args) throws IOException {

//初始化對象

DataInputStream input=new DataInputStream(new FileInputStream("C:\\Users\\Administrator\\Desktop\\Java1807\\data.txt"));

//讀取數據,必須按照存入的順序來讀取

System.out.println(input.readBoolean());

System.out.println(input.readByte());

System.out.println(input.readChar());

System.out.println(input.readDouble());

System.out.println(input.readFloat());

System.out.println(input.readLong());

System.out.println(input.readInt());

System.out.println(input.readShort());

System.out.println(input.readUTF());

//關閉流

input.close();

}

}

輸出結果:

2.2DataOutputStreamD

/**

 * DataOutputStream

 * 二進制輸出流,可以將java的基本類型直接寫到文件中

 * */

 

package day24.io;

 

import java.io.DataOutputStream;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

 

public class DataOutputStreamDemo {

public static void main(String[] args) throws IOException {

//初始化對象

DataOutputStream out=new DataOutputStream(new FileOutputStream("C:\\Users\\Administrator\\Desktop\\Java1807\\data.txt"));

//寫數據

out.writeBoolean(true);//寫入一個boolean值類型

out.writeByte(3);//寫入一個字節類型

out.writeChar('q');

out.writeDouble(1.1);

out.writeFloat(3.14F);

out.writeLong(333L);

out.writeInt(12);

out.writeShort(2209);

out.writeUTF("asda");

//強制刷入

out.flush();

//關閉流

out.close();

}

}

 

輸出結果:

3.打印輸出流

3.1PrintStream

/**

 * PrintStream 打印輸出流

 * 可以輸出字節流,可以向不同的流中輸出數據,自帶換行符

 * 如果輸入煩人是字符,使用PrintWriter,帶編碼格式

 * */

 

package day24.io;

 

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.PrintStream;

 

public class PrintStreamDemo {

 

public static void main(String[] args) throws FileNotFoundException {

// 初始化對象

PrintStream st=new PrintStream(new FileOutputStream("C:\\Users\\Administrator\\Desktop\\Java1807\\p1.txt"),false);

//寫入數據

//不帶換行

st.print(true);

st.print(111);

st.print(12.3F);

st.print("qq1");

//自帶換行功能

st.println(false);

st.println("nihao");

st.println("Hello");

st.println(123);

//關閉

st.close();

}

}

輸出結果:

3.2PrintWriter

 

package day24.io;

 

import java.io.FileNotFoundException;

import java.io.PrintWriter;

 

public class PrintWriterDemo {

 

public static void main(String[] args) throws FileNotFoundException {

// 初始化對象

PrintWriter writer=new PrintWriter("C:\\Users\\Administrator\\Desktop\\Java1807\\p2.txt");

//寫數據

writer.print(true);

writer.print("qq");

writer.print(123);

writer.print(111.1);

//帶換行

writer.println("Hello");

writer.println(false);

writer.println(12.45F);

writer.println('f');

//強制刷入

writer.flush();

//關閉流

writer.close();

}

}

輸出結果:

4.序列化和反序列化操作

4.1Serializable

 

package day24.io;

 

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.ObjectInputStream;

import java.io.ObjectOutputStream;

import java.io.Serializable;

 

//如果該類要支持序列化技術,必須實現接口 Sreializable

@SuppressWarnings("serial")

class Student implements Serializable{

String name;

int age;

}

public class SerializableDemo {

//序列化:對象通過編碼技術轉換成二進制數據存儲起來

public static void writeObj() throws FileNotFoundException, IOException {

//初始化對象

ObjectOutputStream out=new ObjectOutputStream(new FileOutputStream("C:\\Users\\Administrator\\Desktop\\Java1807\\Student1.txt"));

out.writeChar('C');

out.writeBoolean(true);

Student stu=new Student();

stu.name="qq";

stu.age=21;

out.writeObject(stu);

//強制刷入

out.flush();

//關閉流

out.close();

}

//反序列化:將二進制數據通過解碼技術,構建還原成原來的對象

public static void readObj() throws FileNotFoundException, IOException, ClassNotFoundException {

ObjectInputStream in=new ObjectInputStream(new FileInputStream("C:\\Users\\Administrator\\Desktop\\Java1807\\Student1.txt"));

//讀取數據

System.out.println(in.readChar());

System.out.println(in.readBoolean());

Student stu=(Student)in.readObject();

System.out.println(stu.name+"  "+stu.age);

//關閉流

in.close();

}

public static void main(String[] args) throws FileNotFoundException, IOException, ClassNotFoundException {

writeObj();

readObj();

}

}

輸出結果:

4.2練習題

 

package day23.test1;

 

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.ObjectInputStream;

import java.io.ObjectOutputStream;

import java.io.Serializable;

import java.util.ArrayList;

 

//創建學生類

@SuppressWarnings("serial")

class Student implements Serializable{

//屬性

private int sId;

private String name;

private int age;

 

public int getsId() {

return sId;

}

public void setsId(int sId) {

this.sId = sId;

}

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;

}

//構造方法

public Student() {

// TODO 自動生成的構造函數存根

}

public  Student(int sId,String name,int age) {

this.sId=sId;

this.name=name;

this.age=age;

}

@Override

public String toString() {

System.out.println("sId:"+this.sId+"\tname:"+this.name+"\tage:"+this.age);

return super.toString();

}

}

public class StudentSerializable {

//序列化操作

public static void serializeOperation(ArrayList<Student>list) throws IOException {

//初始化對象,關聯字節輸出流

FileOutputStream out=new FileOutputStream("C:\\Users\\Administrator\\Desktop\\Java1807\\Student.txt");

ObjectOutputStream oos=new ObjectOutputStream(out);

//序列化對象

oos.writeObject(list);

//強制刷入

oos.flush();

//關閉流

oos.close();

out.close();

}

//反序列化操作

@SuppressWarnings("unchecked")

public static void antiSerializationOperation() throws IOException, ClassNotFoundException {

//初始化對象,關聯輸入流

FileInputStream in=new FileInputStream("C:\\Users\\Administrator\\Desktop\\Java1807\\Student.txt");

ObjectInputStream ois=new ObjectInputStream(in);

//反序列化

ArrayList<Student>list=(ArrayList<Student>)ois.readObject();

//輸出

for (Student student : list) {

student.toString();

}

//關閉流

ois.close();

in.close();

}

 

public static void main(String[] args) throws IOException, ClassNotFoundException {

//初始化ArrayList對象

ArrayList<Student>list=new ArrayList<Student>();

//添加數據

list.add(new Student(1,"一葉知秋",21));

list.add(new Student(2,"浪子一秋",21));

list.add(new Student(3,"葬劍山莊",21));

list.add(new Student(4,"劍俠情緣",21));

list.add(new Student(5,"葬劍灬尊",21));

//序列化

serializeOperation(list);

//反序列化

antiSerializationOperation();

}

}

輸出結果:

5.知識框架

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章