java流处理(简明实用)(1)

发布时间: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的一种性能优化。BufferedInputStreamBufferedOutputStream/BufferedReaderBufferedWriter

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.数据输入输出流。当读取一个数据时,不必再关心这个数值应当是什么字节。DataInputStreamDataOutputStream类。

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));

java流处理(简明实用)(1)

相关推荐