PipedInputStream和PipedOutputStream:
第一次看的时候真的很打脑壳
管道流,其作用是实现多个线程之间通过IO流实现数据的传输
写这个程序也可以顺便复习一下其他流
public class Example19{
public static void main(String[] args){
//由于是线程间的数据通信,故没有参数
PipedInputStream pis = new PipedInputStream();
PipedOutputStream pos = new PipedOutputStream();
//pis和pos建立连接
pis.connect(pos);
new Thread(new Runnable() {
public void run(){
//读入从键盘键入的数据
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
//另一个PrintStream,需要记忆的是,它的参数见后边详解
PrintStream ps = new PrintStream(pos);
//循环读取
while(true){
String line;
line = br.readLine();
ps.println(line);
System.out.println(Thread.currentThread ().getName() + "要求输入内容:");
}
}
}
//另另一个线程,实现数据的通信
new Thread(new Runnable() {
public void run() {
BufferedReader br = new BufferedReader(new InputStreamReader(pis));
while(true){
System.out.println(Thread.currentThread().getName() +"收到的数据" +br.readLine());
}
}
}
}
}
在字符流中也有一对PipedReader和PipedWriter,其用法与这一对完全相同
PrintStream目前接收两种参数:
PrintStream(FileOutputStream fos, boolean b)
PrintStream(PipedOutputStream pos)
ByteArrayInputStream和ByteArrayOutputStream:
ByteArrayInputStream类会在创建对象时就创建一个byte型数组的缓冲区,该流会把数据先写入缓冲区,最后一次性写入文件。
SequenceInputStream(序列流)
sequence:顺序,连续
当用这个流来读取数据时,它会依次从所有被串联的输入流中读取数据
public class Example23 {
public static void main(String[] args){
FileInputStream fis1 = new FileInputStream("stream1.txt");
FileInputStream fis2 = new FileInputStream("stream2.txt");
//创建一个序列流,传入各流以合并
SequenceInputStream sis = new SequenceInputStream(fis1,fis2);
FileOutputStream fos = new FileOutputStream("sequence.txt");
String len;
byte[] arr = new byte[1024];
while((len = sis.read(arr)) != -1){
fos.write(arr,0,len);
//这里要复习一下String类的常用方法
fos.write("\n\r".getBytes());
}
sis.close();
out.close();
}
}
如果要传入多个流进行合并,就要用下一种构造方法:
SequenceInputStream(Enumeration<? extends InputStream>e)
enumeration对象会返回一系列InputStream类型的对象
关键代码:
Enumeration e = new vector.elements();
//Enumeration的复习:jdk1.2以前还没有Iterator接口的时候,遍历集合需要使用Enumeration接口,
而配套的类就是Vector集合,该集合是List接口的实现类,用法与ArrayList完全相同,区别在于Vector集合是线程安全的。其element()方法用于返回Enumeration对象,然后Enumeration对象的boolean hasMoreElements()和Object nextElement()可以实现Vector集合的遍历(迭代器)
//vector类的添加元素方法:boolean addElement(Object o)
class Example24 {
public static void main(String[] args){
Vector vector = new Vector();
FileInputStream fis1 = new FileInputStream("feriosa.txt");
FileInputStream fis2 = new FileInputStream("nux.txt");
FileInputStream fis3 = new FileInputStream("max.txt");
//将这三个文件输入流添加到vector集合中
vector.addElement(fis1);
vector.addElement(fis2);
vector.addElement(fis3);
//获取Vector的迭代器,以获取Vector中的元素
Enumeration e = vector.elements();
SequenceInpuStream sis = new SequenceInputStream(e);
FileOutputStream fos = new FileOutputStream("madmax.txt");
int len;
byte[] arr= new byte[1024];
while((len = sis.read(arr) != -1){
fos.write(arr,0,len);
fos.write("/n/r".getBytes());
}
sis.close();
fos.close();
}
}
File:
该类封装了一个路径,并提供了一系列方法用于操作该路径所指向的文件
File类常用的构造方法:
File(String pathname)
File(String parent, String child)---@param parent child 分别表示父路径和子路径
File(File parent,String child)---根据指定的File类的父路径和字符串类型的子路径(包括文件名称)创建一个File对象
File类的常用方法:
boolean exists()
boolean delete()
boolean createNewFile()---当File对象对应的文件不存在时,该方法将新建一个此File对象所指定的新文件
boolean canRead()
boolean canWrire()
boolean isFile()---判断File对象对应的时候是文件而不是目录
boolean isDirectory()---也上一个方法相反
boolean isAbsolute()---判断File对象对应的文件或目录是否是绝对路径
String getName()
String getPath()
String getAbsolutePath()---从盘符开始的路径就是绝对路径
String [] list()---列出指定目录的全部内容,只列出名称
long lastModified()---返回1970年1月1日0时0分0秒到文件最后修改时间的毫秒值
long length()
File[] listFiles()---返回一个包含了File对象所有的子文件和子目录的File数组
public class Exaple30{
public static void main(String[] args){
File file = new File(s;
|
|