java流处理(简明实用)(1)
发布时间:2012-07-26 10:34:08
发布时间:2012-07-26 10:34:08
流是一组有序的数据序列。所有输入输出流都放在java.io包中。所有输入流都是抽象类InputStream(字节输入流)或抽象类Reader(字符输入流)的子类;所有输出流类都是抽象类OutputStream(字节输出流)或抽象类Writer(字符输出流)的子类。
Java中的字符都是Unicode编码,是双字节的。
2.File类。在java.io包中。
ex:
File file=new File("D:/myfile","word.txt"); //实例化文件对象D:/myfile/word.txt,父路径为D:/myfile
if(file.exists()&&!file.isDirectory()) //如果该文件存在且不是目录
{
System.out.println("file:"file.getName()+";length:"+file.length()+";isHidden:"+file.isHidden());
file.delete(); //删除文件对象
}else{
file.createNewFile(); //如果文件不存在,则创建该文件
}
3.文件输入输出流。
<1.FileInputStream类与FileOutputStream类(针对字节流,读写汉字时有可能出现乱码。需要借助byte数组进行输入输出操作。)
ex:
File file =new File("D:/myfile","word.txt"); //实例化文件对象
FileOutputStream out=new FileOutputStream(file); //实例化文件输出流,以文件对象为构造函数参数,该文件对象指定了输出目标
byte text[]="北京交通大学交通运输学院".getBytes(); //将String转换成byte数组
out.write(text); //文件输出流将byte数组输出
out.close(); //关闭文件输出流
FileInputStream in=new FileInputStream(file);
byte txt[]=new txt[1024]; //新建byte数组,用于存放文件输入流
int len=in.read(txt); //将文件输入流读入到byte数组txt中,并返回文件输入流的长度
System.out.println("text文件中的信息是:"+new String(txt,0,len));
in.close();
<2.FileReader类和FIleWriter类(针对字符流。不需要借助byte数组来操作,对于输入流借助char数组。)
ex:
FileWriter out=new FileWriter(new File("D:/myfile/word.txt"));
out.write("北京交通大学交通运输学院");
out.close();
FileReader in=new FileReader(new file("D:/myfile/word.txt"));
char txt[]=new char[1024]; //对于字符流,新建char数组来存放文件输入流
int len=in.read(txt);
System.out.println("text文件中的信息是:"+new String(txt,0,len));
in.close();
4.带缓存的输入输出流。缓存流为I/O流增加了内存缓冲区,是I/O的一种性能优化。BufferedInputStream与BufferedOutputStream类/BufferedReader与BufferedWriter类
ex:
FileWriter fw=new FileWriter(new File("D:/myfile/word.txt"));
BufferedWriter bufw=new BufferedWriter(fw); //实例化缓存输出流,以文件输出流为构造函数的参数,使文件输出流要输出的东西先放到缓存输出流中
bufw.write("北京交通大学交通运输学院"); //将待输出内容放到缓存输出流中
bufw.newLine(); //写入一个行分隔符
bufw.flush(); //将缓存输出流中的内容立刻写入输出流中,即直接输出到D:/myfile/word.txt中
bufw.close(); //先关闭缓存输出流,之后才能关闭文件输出流
fw.close(); //关闭文件输出流
String s=null;
FileReader fr=new FileReader(new File("D:/myfile/word.txt"));
BufferedReader bufr=new BufferedReader(fr); //文件输入流要输入的东西先放到缓存输入流中
while((s=bufr.readLine())!=null) //读取一个文本行到s,读完一行后指针向下移动一行
{
System.out.println(s); //输出每一行文本内容
}
bufr.close(); //先关闭缓存输入流,之后才能关闭文件输入流
fr.close(); //关闭文件输入流
5.数据输入输出流。当读取一个数据时,不必再关心这个数值应当是什么字节。DataInputStream与DataOutputStream类。
ex:
FileOutputStream fos=new FileOutputStream("D:/word.txt"); //实例化文件输出流,直接以文件路径作为构造函数的参数
DataOutputStream ds=new DataOutputStream(fos); //实例化数据输出流,以文件输出流为构造函数的参数,指定了输出目标
ds.writeUTF("使用writeUTF()方法写入数据"); //先将字符串按照UTF编码后的字节长度写入目标设备,然后才是每一个字节的UTF编码
ds.writeChars("使用writeChars()方法写入数据"); //将字符串中的每一个字符的两个字节的内容都写到目标设备中
ds.writeBytes("使用writeBytes()方法写入数据"); //只是将字符串中的每一个字符的低字节内容写入目标设备中
ds.close();fos.close();
FileInputStream fis=new FileInputStream("D:/word.txt");
DataInputStream dis=new DataInputStream(fis);
System.out.println(dis.readUTF()); //DataInputStream类只提供了readUTF()方法返回字符串
dis.close();fis.close();
6.ZIP压缩输入输出流
<1.压缩文件
ex: //将D:/word.txt压缩至D:/hello.zip/a/word.txt。
ZipOutputStream out=new ZipOutputStream(new FileOutputStream("D:/hello.zip")); //实例化压缩文件类,以文件输出流为构造函数的参数,指定了压缩后的文件名为D:/hello.zip
out.putNextEntry(new ZipEntry("a/")); //开始一个新的ZipEntry(压缩文件的进入点),将流内的位置移至此entry所指数据的开头
FileInputStream in=new FileInputStream("D:/word.txt"); //实例化文件输入流,指定要压缩的文件
int b;
while((b=in.read())!=-1) //读取文件输入流的每一行并返回行号,若为最后一行则返回-1.
{
out.write(b); //将in读出的每一行写入当前ZIP条目中
}
in.close();
<2.解压文件
ex:
ZipInputStream in=new ZipInputStream(new FileInputStream("D:/hello.zip")); //实例化对象,指定要解压文件为D:/hello.zip
ZipEntry entry; //获取下一个ZipEntry,并将流内的位置移至该entry所指数据的开头
while(((entry=in.getNextEntry())!=null) && !entry.isDirectory()) //如果entry不为空,且不为目录
{
File file=new File(entry.getName());
if(!file.exists()) //若file存在,就不解压了
{
file.createNewFile();
}
in.closeEntry();
}
注:
1. System.in表示用户输入的内容。ex: BufferedReader line=new BufferedReader(new InputStreamReader(System.in));