两个输入流合并,然后输出
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);