Java_IO

在Java中,将通过不同输入输出设备(键盘,内存,显示器,网络等)之间的数据传输抽象表述为“流”,程序允许通过流的方式与输入输出设备进行数据传输。Java中的“流”都位于java.io包中,称为IO(输入输出)流

IO流按照操作数据的不同,可以分为字节流和字符流,按照数据传输方向的不同又可分为输入流和输出流。

在I0包中,字节流的输入输出流分别用java.io.InputStreamjava.io.OutputStream表示,字符流的输入输出流分别用java.io.Readerjava.io.Writer表示。


字节流:

字节流的两个顶级父类:抽象类:InputStreamOutputStream

InputStream类:

int read()

从输入流读取一个8位的字节,把它转换为0-255之间的整数,并返回这一整数(逐个读入字节

int read(byte[]b)

从输入流读取若干字节,把它们保存到参数b指定的字节数组中,返回的整数表示读取字节的数目。(读入字节数组

int read(byte[]b,int off,int len)从输入流读取若干字节,把它们保存到参数b指定的字节数组中,off 指定字节数组开始保存数据的起始下标,len表示读取的字节数目。(读入字节数组
void close()关闭此输入流并释放与该流关联的所有系统资源。

OutputStream类:

void write(int b)向输出流写入一个字节(逐个字节写入
void write(byte[]b)把参数b指定的字节数组的所有字节写到输出流。
void write(byte[]b,int off,int len)将指定byte数组中从偏移量off开始的len个字节写入输出流。
void flush()刷新此输出流并强制写出所有缓冲的输出字节。
void close()关闭此输出流并释放与此流相关的所有系统资源。

在操作文件时,最常见的就是从文件中读取数据并将数据写入文件,即文件的读写。针对文件的读写,JDK专门提供了两个类,分别是FilelnputStreamFileOutputStream

//创建一个文件字节输入流
FileInputStream in = new FileInputStream("test.txt");
int b= 0;
//定义一个int类型的变量b,记住每次读取的一个字节
while(true)
    b= in.read();//变量b记住读取的一个字节
    if(b==-1)//如果读取的字节为-1,跳出while循环
        break;
    System.out.println(b);//否则将b写出
in.close();
//文件字节输出流
FileOutputStream out = new FileOutputStream("example.txt");
String str ="我是傻逼";
byte[]b = str.getBytes();
for(int i = 0;i< b.length;i++){
    out.write(b[i]);
}
out.close();

IO流在进行数据读写操作时会出现异常,然而一旦遇到IO异常,IO流的close()方法将无法得到执行,流对象所占用的系统资源将得不到释放。因此,为了保证IO流的close()方法必须执行,通常将关闭流的操作写在finally代码块中。

finally{
    try{
        if(in!=null)    //如果in不为空,关闭输入流
            in.close();        
    }catch(Exception e){
        e.printStackTrace();
    }
    try{
        if(out!=null)    //如果out不为空,关闭输出流
            out.close();
        }catch(Exception e){
            e.printStackTrace();
        }
    }
}

字节缓冲流:

在I0包中提供两个带缓冲的字节流,分别是BufferedInputStreamBufferedOutputStream,它们的构造方法中分别接收InputStreamOutputStream类型的参数作为对象。

byte[]buff = new byte[1024];    //定义一个字节数组,作为缓冲区
int len;    //定义一个int类型的变量len记住读取读入缓冲区的字节数
long begintime = System.currentTimeMillis();
while((len = in.read(buff))!=-1){    //判断是否读到文件末尾
    out.write(buff,0,len);    //从第一个字节开始,向文件写入len个字节
}
//创建一个带缓冲区的输入流
BufferedInputStream bis = new BufferedInputStream(new FileInputStream("src.txt"));
//创建一个带缓冲区的输出流
BufferedoutputStream bos = new BufferedOutputStream(new FileOutputStream("des.txt"));
int len;
while((len = bis.read())!=-1){
    bos.write(len);
}

字符流:

字节流在读写文件时操作的都是字节,所以就有字符流,在程序中操作字符。

字符流的两个顶级父类:抽象类:ReaderWriter

//创建一个PileReader对象用来读取文件中的字符
FileReader reader=new FileReader("reader.txt");
int ch;//定义一个变量用于记录读取的字符
while((ch=reader.read())!=-1){//循环判断是否读取到文件的末尾
    system.out.print1n((char)ch);//不是字符流末尾就转为字符打印
}
reader.close();//关闭文件读取流,释放资源
FileReader reader= new FileReader("sre.txt");
Filewriter writer =new Filewriter("des.txt");

//创建一个Buf feredReader缓冲对象
BufferedReader br=new BufferedReader(reader);
//创建一个Bufferdwriter缓冲区对象
BufferedWriter bw=new BufferedNriter(writer);

String str;
while((str br.readline())!=null){
    bw.write(str);
    bw.newlrine();
}
br.close();
bw.close();

转换流:

在JDK中提供了两个类可以将字节流转换为字符流,它们分别是InputStreamReaderOutputStreamWriter

OutputStreamWriterWriter的子类,它可以将一个字节输出流转换成字符输出流,方便直接写入字符。

InputStreamReaderReader的子类,它可以将一个字节输入流转换成字符输入流,方便直接读取字符。

FileInputsStream in w,nevw Fileinputs-ream("are*xt");//创建字节输入流
//将字节流输入转换成字符输入流
InputStreamReader isr =new InputstreamReader(in);
BufferedReader br =new BufferedReader(isr);//赋予字符流对象缓冲区
FileOutputStream out =new FileoutputStream("des.txt");
//将字节输出流转换成字符输出流
OutputStreamyriter osw =new OutputStreamwriter(out);
BufferedNriter bw = new Bufferedmriter(osw);//赋予字符输出流对象缓冲区
String line;
while((line=br.readLine())!=null){//判断是否读到文件末尾
    bw.write(line);//输出读取到的文件
}
br.close();
bw.close();

File类:

File类构造方法:

File(String pathname)通过指定的一个字符串类型的文件路径来创建一个新的File对象
File(String parent,String child)根据指定的一个字符串类型的父路径和一个字符串类型的子路径
(包括文件名称)创建一个File对象
File(File parent,String child)根据指定的File类的父路径和字符串类型的子路径(包括文件名称)创建一个File对象

File类常用方法: 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值