IO流进阶

两个输入流合并,然后输出

FileInputStream fis1 = new FileInputStream("1.txt");
FileInputStream fis2 = new FileInputStream("2.txt");
SequenceInputStream sis = new SequenceInputStream(fis1,fis2);
FileOutputStream fos = new FileOutputStream("55.txt");
int b;
while((b=sis.read())!=-1) {
	fos.write(b);
}
sis.close();
fos.close();

将多个输入流整合成一个,然后输出

FileInputStream fis1 = new FileInputStream("1.txt");
FileInputStream fis2 = new FileInputStream("2.txt");
FileInputStream fis3 = new FileInputStream("3.txt");
//创建集合对象
Vector<FileInputStream> v=new Vector<>();
v.add(fis1);
v.add(fis2);
v.add(fis3);
Enumeration<FileInputStream> en=v.elements();
//将枚举中的输入流整合成一个
SequenceInputStream sis = new SequenceInputStream(en);
FileOutputStream fos = new FileOutputStream("55.txt");
int b;
while((b=sis.read())!=-1) {
	fos.write(b);
}
sis.close();
fos.close();

内存输出流

//内存输出流可以向内存里写数据,把内存当做一个缓冲区,写出之后可以一次性获取所有数据。
FileInputStream fis = new FileInputStream("1.txt");
//在内存中创建了可以增长的内存数据
ByteArrayOutputStream baos = new ByteArrayOutputStream();
int b;
while((b=fis.read())!=-1) {
	baos.write(b);
}
//将缓冲区的数据全部都取出来,并赋值给arr数组。
//可以指定码表
byte[] arr=baos.toByteArray();
System.out.println(new String(arr));
//不指定码表
//System.out.println(baos.toString());
fis.close();

随机访问流

//      随机访问流
		RandomAccessFile raf = new RandomAccessFile("1.txt", "rw");
//		raf.write(97);
//		int x = raf.read();
//		System.out.println(x);
		
		//设置指定位置设置指针读和写,适用于多线程
		raf.seek(10);
		raf.write(101);
		raf.close();

对象操作流,输出流ObjectOutputStream (序列化)

Person p1 = new Person("lili",24);
Person p2 = new Person("li32",55);
ObjectOutputStream pos = new ObjectOutputStream(new FileOutputStream("e.txt"));
pos.writeObject(p1);
pos.writeObject(p2);
pos.close();

对象操作流,输入流ObjectInputStream (反序列化)

ObjectInputStream ois = new ObjectInputStream(new FileInputStream("e.txt"));
Person p1=(Person)ois.readObject();
Person p2=(Person)ois.readObject();
System.out.println(p1);
System.out.println(p2);
ois.close();

优化对象操作流的读写

Person p1 = new Person("lili",24);
Person p2 = new Person("li32",55);
ArrayList<Person> list = new ArrayList<>();
list.add(p1);
list.add(p2);
ObjectOutputStream pos = new ObjectOutputStream(new FileOutputStream("e.txt"));
pos.writeObject(list);
pos.close();

ObjectInputStream ois = new ObjectInputStream(new FileInputStream("e.txt"));
ArrayList<Person> list=(ArrayList<Person>) ois.readObject();
for (Person person : list) {
	System.out.println(person);
}
ois.close();

数据的输入输出流

DataOutputStream dos = new DataOutputStream(new FileOutputStream("g.txt"));
dos.writeInt(997);
dos.writeInt(998);
dos.close();

DataInputStream dis = new DataInputStream(new FileInputStream("g.txt"));
int x = dis.readInt();
int y = dis.readInt();
dis.close();

打印流(字节流)

PrintStream ps = System.out;
//底层通过Integer.toString()将其转换成字符串打印
ps.println(56);
//查找码表,找到对应的值打印
ps.write(56);
ps.close();

打印流(字符流)

PrintWriter pw = new PrintWriter(new FileOutputStream("f.txt"),true);
//自动刷出功能只支持println,write和print都不可以
pw.println(97);
pw.write(97);
//		pw.close();

改变标准输入输出流

//改变标准输入流
System.setIn(new FileInputStream("1.txt"));
//改变标准输出流
System.setOut(new PrintStream("b.txt"));
//获取标准键盘输入流,默认指向键盘,改变后指向文件
InputStream is = System.in;
//获取标准输出流,默认指向控制台,改变后指向文件
PrintStream ps = System.out;
int b;
while((b=is.read())!=-1) {
	ps.write(b);
}
is.close();
ps.close();

两种键盘录入:
转换流InputStreamReader,将键盘输入转换成字符流,然后通过BufferedReader让其功能更加强大。

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String line = br.readLine();
System.out.println(line);
br.close();
Scanner sc = new Scanner(System.in);

标准输入输出流copy图片

System.setIn(new FileInputStream("11.jpg"));
System.setOut(new PrintStream("22.jpg"));
InputStream is = System.in;
PrintStream ps = System.out;
byte[] arr=new byte[1024];
int len;
while((len=is.read(arr))!=-1) {
	ps.write(arr,0,len);
}
is.close();
ps.close();

Properties是Hashtable的子类

Properties prop = new Properties();
prop.put("adv", 123);
System.out.println(prop);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值