Java基础之IO操作(二)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/king_cannon_fodder/article/details/83721108

Java基础之IO操作(二)

一、BufferedInputStream

public static void main(String[] args) {
File src = new File("abc.txt");
//2、选择流
InputStream  is =null;
try {
	is =new BufferedInputStream(new FileInputStream(src));
	//3、操作 (分段读取)
	byte[] flush = new byte[1024]; //缓冲容器
	int len = -1; //接收长度
	while((len=is.read(flush))!=-1) {
		//字节数组-->字符串 (解码)
		String str = new String(flush,0,len);
		System.out.println(str);
	}		
		
} catch (FileNotFoundException e) {
	e.printStackTrace();
} catch (IOException e) {
	e.printStackTrace();
}finally {
	//4、释放资源
	try {
		if(null!=is) {
			is.close();
		}
	} catch (IOException e) {
		e.printStackTrace();
	}			
}
}

二、BufferedOutputStream

public static void main(String[] args) {
//1、创建源
File dest = new File("dest.txt");
//2、选择流
OutputStream os =null;
try {
	os =new BufferedOutputStream( new FileOutputStream(dest));
	//3、操作(写出)
	String msg ="IO is so easy\r\n";
	byte[] datas =msg.getBytes(); // 字符串-->字节数组(编码)
	os.write(datas,0,datas.length);
	os.flush();
}catch(FileNotFoundException e) {		
	e.printStackTrace();
}catch (IOException e) {
	e.printStackTrace();
}finally{
	//4、释放资源
	try {
		if (null != os) {
			os.close();
		} 
	} catch (Exception e) {
	}
}
}

三、BufferedReader

public static void main(String[] args) {
//1、创建源
File src = new File("abc.txt");
//2、选择流
BufferedReader  reader =null;
try {
	reader =new BufferedReader(new FileReader(src));
	//3、操作 (分段读取)
	String line =null;
	while((line=reader.readLine())!=null) {
		//字符数组-->字符串
		System.out.println(line);
	}		
		
} catch (FileNotFoundException e) {
	e.printStackTrace();
} catch (IOException e) {
	e.printStackTrace();
}finally {
	//4、释放资源
	try {
		if(null!=reader) {
			reader.close();
		}
	} catch (IOException e) {
		e.printStackTrace();
	}
}
}

四、BufferedWriter

public static void main(String[] args) {
//1、创建源
File dest = new File("dest.txt");
//2、选择流
BufferedWriter writer =null;
try {
	writer = new BufferedWriter(new FileWriter(dest));
	//3、操作(写出)			
	writer.append("IO is so easy");
	writer.newLine();
	writer.append("尚学堂欢迎你");
	writer.flush();
}catch(FileNotFoundException e) {		
	e.printStackTrace();
}catch (IOException e) {
	e.printStackTrace();
}finally{
	//4、释放资源
	try {
		if (null != writer) {
			writer.close();
		} 
	} catch (Exception e) {
	}
}
}

五、转换流

public static void main(String[] args) {
//操作System.in 和System.out,可以指定编码格式进行转化
try(BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
	BufferedWriter writer =new BufferedWriter(new OutputStreamWriter(System.out));){
	//循环获取键盘的输入(exit退出),输出此内容
	String msg ="";
	while(!msg.equals("exit")) {
		msg = reader.readLine(); //循环读取
		writer.write(msg); //循环写出
		writer.newLine();
		writer.flush(); //强制刷新
	}
	}catch(IOException e) {
		System.out.println("操作异常");
	}	
}

六、数据操作流

public static void main(String[] args) throws IOException {
	//写出
	ByteArrayOutputStream baos =new ByteArrayOutputStream();
	DataOutputStream dos =new DataOutputStream(new BufferedOutputStream(baos));
	//操作数据类型 +数据
	dos.writeUTF("编码辛酸泪");
	dos.writeInt(18);
	dos.writeBoolean(false);
	dos.writeChar('a');
	dos.flush();
	byte[] datas =baos.toByteArray();
	System.out.println(datas.length);
	//读取
	DataInputStream dis =new DataInputStream(new BufferedInputStream(new ByteArrayInputStream(datas)));
	//顺序与写出一致
	String msg = dis.readUTF(); 
	int age = dis.readInt();
	boolean flag = dis.readBoolean();
	char ch = dis.readChar();
	System.out.println(flag);
}

七、对象操作流

public class ObjectTest {
public static void main(String[] args) throws IOException, ClassNotFoundException {
//写出 -->序列化
	ByteArrayOutputStream baos =new ByteArrayOutputStream();
	ObjectOutputStream oos =new ObjectOutputStream(new BufferedOutputStream(baos));
	//操作数据类型 +数据
	oos.writeUTF("编码辛酸泪");
	oos.writeInt(18);
	oos.writeBoolean(false);
	oos.writeChar('a');
	//对象
	oos.writeObject("谁解其中味");
	oos.writeObject(new Date());
	Employee emp =new Employee("马云",400);
	oos.writeObject(emp);
	oos.flush();
	byte[] datas =baos.toByteArray();
	System.out.println(datas.length);
	//读取 -->反序列化
	ObjectInputStream ois =new ObjectInputStream(new BufferedInputStream(new ByteArrayInputStream(datas)));
	//顺序与写出一致
	String msg = ois.readUTF(); 
	int age = ois.readInt();
	boolean flag = ois.readBoolean();
	char ch = ois.readChar();
	System.out.println(flag);
	//对象的数据还原  
	Object str = ois.readObject();
	Object date = ois.readObject();
	Object employee = ois.readObject();
		
	if(str instanceof String) {
		String strObj = (String) str;
		System.out.println(strObj);
	}
	if(date instanceof Date) {
		Date dateObj = (Date) date;
		System.out.println(dateObj);
	}
	if(employee instanceof Employee) {
		Employee empObj = (Employee) employee;
		System.out.println(empObj.getName()+"-->"+empObj.getSalary());
	}
		
}

}
//javabean 封装数据
class Employee implements java.io.Serializable{
	private transient String name; //该数据不需要序列化
	private double salary;
	public Employee() {
	}
	public Employee(String name, double salary) {
		this.name = name;
		this.salary = salary;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public double getSalary() {
		return salary;
	}
	public void setSalary(double salary) {
		this.salary = salary;
	}
	
}

猜你喜欢

转载自blog.csdn.net/king_cannon_fodder/article/details/83721108