简述:流是一组有序到数据序列,分为输入流和输出流两种。IO为流提供流通道。
IO
java提供了InputStream和Reader两种类作为输入流到类。
OutputStream和Writer作为输出流到类。
File
File类用于对文档的操作,通常使用三种构造方法
new File(String pathname)
new File(String parent, String child)
new File(File f, String child)
现在对IO和File类进行一些练习
文件的写入和写出
```js
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
public class FileTest {
public static void main(String[] args) {
// java对流的操作都大同小异
// 输入流:
// 1.确定输出源
// 2.确定流的类型,确定使用InputStream的子类,对子类进行实例化,将流流进InputStream的子类
// 3.用对象的方法对流进行读取操作
// 输出流:
// 1.确定输入目标
// 2.确定流的类型,确定使用OutputStream的子类,对子类进行实例化,将流从OutputStream的子类中流出
File file =new File("word.txt"); //创建一个File类
try{
// 确定输入源的类型,属于文件流类型
FileOutputStream out =new FileOutputStream(file);
// 确定流的类型,属于bytes
byte buy[]="我有一只小毛驴".getBytes();
// 用载体的方法进行写入操作
out.write(buy);//用write写入对象
out.close();
}catch (Exception e){
e.printStackTrace();
}
try{
// 确定输出载体类型,确定使用文件流类型
FileInputStream in =new FileInputStream(file);
// 确定流的类型
byte byt[] =new byte[1024];
// 读取
int len = in.read(byt);
System.out.println(new String(byt, 0 , len));
in.close();
}catch (Exception e){
e.printStackTrace();
}
}
}
```
FileReader和FileWriter类
BufferedInputStream对InputStream进行带缓存区对优化,缓存区的内容会在程序调用close()方法之前,将缓存区的信息缓存到磁盘文件中。类中提供了flush方法,可以将缓存区的内容强制刷新到磁盘中。
提供了两种构造函数
BufferedInputStream(InputStream in)
BufferedInputStream(InputStream in,int size) //size表示缓存的大小,默认32位
BufferedOutputStream(OutputStream in)
BufferedOutputStream(OutputStream in,int size)
```import java.io.*;
//BufferedInputStream和BufferedOutoutStrem类使用
public class BufferIO {
// BufferedInputStream对InputStream进行带缓存区对优化
public static void main(String[] args) {
String content[] = {"好久不见","最近好吗","常联系"};
File file =new File("word.txt");
try{
FileWriter fw =new FileWriter(file);
BufferedWriter bufw =new BufferedWriter(fw);
for(int k =0 ; k < content.length ; k++){
bufw.write(content[k]);
bufw.newLine();
}
bufw.close();
fw.close();
}catch (Exception e){
e.printStackTrace();
}
try {
FileReader fr =new FileReader(file);
BufferedReader bufr =new BufferedReader(fr);
String s =null;
int i =0;
while((s = bufr.readLine()) !=null){
i++;
System.out.println("第"+i+"行:"+s);
}
bufr.close();
fr.close();
}catch (Exception e){
e.printStackTrace();
}
}
}
```
数据输入/输出流
数据输入/输出流允许应用程序与机械无关的方式从底层输入流读取基本的java数据类型。
```import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
public class DataIO {
public static void main(String[] args) {
try{
FileOutputStream fs =new FileOutputStream("word.txt");
DataOutputStream ds =new DataOutputStream(fs);
ds.writeUTF("使用writeUTF方法写入数据"); //可以读取
ds.writeChars("使用writeChars方法写入数据"); //无法读取
ds.writeBytes("使用writeByte方法写入数据"); //无法读取
ds.close();
// 创建FileInputStream对象
FileInputStream fis =new FileInputStream("word.txt");
DataInputStream dis =new DataInputStream(fis);
System.out.println(dis.readUTF());
}catch (Exception e){
e.printStackTrace();
}
}
}
```
压缩文件和解压文件
压缩文件
```import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
//这个类实现了文件的压缩和解压缩
public class ZipSteam {
private void zip(String zipFileName, File inputFile)throws Exception{
// 传入文件名和 file类
// 创建zip类
ZipOutputStream out =new ZipOutputStream(new FileOutputStream(zipFileName));
// 进入zip压缩方法
zip(out,inputFile,"");
System.out.println("压缩中。。");
out.close();
}
private void zip(ZipOutputStream out, File f, String base)throws Exception {
// 传入zip类,文件和base
if(f.isDirectory()){
File[] fl = f.listFiles();//获取路径数组
if(base.length() !=0){
out.putNextEntry(new ZipEntry(base+"/"));//写入此目录的entry
}
for(int i =0; i < fl.length ; i++){//循环遍历数组中的文件
zip(out, f, base);
}
}else{
out.putNextEntry(new ZipEntry(base)); //创建新的进入点
// 创建FileInputSteam对象
FileInputStream in =new FileInputStream(f); //创建fileInputStream对象
int b; //定义int型变量
System.out.println(base);
while((b=in.read()) != -1){//如果没有到达流的尾部
out.write(b); //将字节写入当前ZIP条目的尾部
}
in.close();
}
}
public static void main(String[] args) {
ZipSteam zs =new ZipSteam();
try{
zs.zip("/Users/liang/IdeaProjects/upload/FileIOtest/word.zip",new File("/Users/liang/IdeaProjects/upload/FileIOtest/word.txt"));
}catch (Exception ex){
ex.printStackTrace();
}
}
}
```
解压文件:
```import java.io.*;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
import java.util.zip.ZipInputStream;
//解压文件
public class Decompressing {
public static void main(String[] args) {
File file =new File("word.zip");
ZipInputStream zin;
try{
ZipFile zipFile =new ZipFile(file);
zin =new ZipInputStream(new FileInputStream(file));
ZipEntry entry = zin.getNextEntry();
while (((entry=zin.getNextEntry())!=null)&&!entry.isDirectory()){
File tmp =new File("/Users/liang/IdeaProjects/upload/FileIOtest/"+entry.getName());
if(!tmp.exists()){
tmp.getParentFile().mkdir();
OutputStream os =new FileOutputStream(tmp);
InputStream in = zipFile.getInputStream(entry);
int count =0;
while((count = in.read()) != -1){
os.write(count);
}
os.close();
in.close();
}
zin.closeEntry();
System.out.println(entry.getName() +"解压成功");
}
zin.close();
}catch (Exception e){
e.printStackTrace();
}
}
}
```