java io讲解_《Java基础知识》Java IO流详解

Java IO概念

1. 用于设备之间的数据传输。

2. Java 将操作数据流的功能封装到了IO包中。

3. 数据流流向分:输入流和输出流,操作对象为文件。

4. 流按照操作数据分:字节流(通用)和字符流。

5. 将计算机语言:二进制数据转换成文件显示到电脑上。

IO包:继承关系图:

bcd5234cbe6be136bf1cff1fd202c3b0.png

字符流:

Reader :读取字符流,方法见API。

Writer :写入字符流,方法见API。

案例(Writer ):

import java.io.*;public classvar {public static voidmain(String[] agrs){

Writer writer= null;try{

writer= new FileWriter("Demo.txt");

// writer = new FileWriter("Demo.txt",true); 文件续写功能,否则会覆盖。

writer.write("今天天气真好!");

writer.flush();

}catch(IOException e) {

e.printStackTrace();

}finally{if(writer != null){try{

writer.close();

}catch(IOException e) {

e.printStackTrace();

}

}

}

}

}

运行结果:

6e8905ca5e3471552345fb05030fdd7b.png

案例(Reader):

文件数据:

30533c82e0348b6ae8ddd14f92616625.png

import java.io.*;public classvar {public static voidmain(String[] agrs){

Reader reader= null;try{

reader= new FileReader("Demo.txt");

char[] arr = new char[5];int red = reader.read(arr); //red是装到数组的长度。

while(red != -1){

System.out.println(new String(arr,0,red));

red=reader.read(arr);

}

}catch(IOException e) {

e.printStackTrace();

}finally{if(reader != null){try{

reader.close();

}catch(IOException e) {

e.printStackTrace();

}

}

}

}

}

运行结果:

74307c5c2da72ddea5d1f1472f387bbd.png

实现一个完整的文件复制。

import java.io.*;public classvar {public static voidmain(String[] agrs){

Reader reader= null;

Writer writer= null;try{

reader= new FileReader("Demo.txt");

writer= new FileWriter("Dome1.txt"); // char[] arr = new char[5];int red = 0; //red是装到数组的长度。

while((red = reader.read(arr)) != -1){

writer.write(new String(arr,0,red));

writer.flush();

}

}catch(IOException e) {

e.printStackTrace();

}finally{if(reader != null){try{

reader.close();

}catch(IOException e) {

e.printStackTrace();

}

}if(writer != null){try{

writer.close();

}catch(IOException e) {

e.printStackTrace();

}

}

}

}

}

运行结果:

e7de0b9f0897cd6a89189e24db5c8f0a.png

优化文件复制案例(缓冲流):

import java.io.*;public classvar {public static voidmain(String[] agrs){

BufferedReader bufferedReader= null; //缓冲读取流

BufferedWriter bufferedWriter = null; //缓冲写入流

try{

bufferedReader= new BufferedReader(new FileReader("Demo.txt"));

bufferedWriter= new BufferedWriter(new FileWriter("Dome2.txt"));

String str ;while((str = bufferedReader.readLine()) != null){

bufferedWriter.write(str);

bufferedWriter.newLine();//换行。

bufferedWriter.flush();

}

}catch(IOException e) {

e.printStackTrace();

}finally{if(bufferedReader != null){try{

bufferedReader.close();

}catch(IOException e) {

e.printStackTrace();

}

}if(bufferedWriter != null){try{

bufferedWriter.close();

}catch(IOException e) {

e.printStackTrace();

}

}

}

}

}

运行结果:

260d12a7aa6d6c12b5b35b45569cee80.png

上述IO无法处理视频,图片等一些文件,拷贝出来的文件也无法打开,由此我们引出字节流。

字节流:

OutputSteam:写入字节流,方法见API。

InputSteam: 读取字节流,方法见API。

案例(OutputSteam):

public classvar {public static voidmain(String[] agrs){

FileOutputStream fileOutputStream= null;try{

fileOutputStream= new FileOutputStream("demo.txt");

fileOutputStream.write("今天天气真好,我们去玩吧!".getBytes());//不需要刷新。

} catch(FileNotFoundException e) {

e.printStackTrace();

}catch(IOException e) {

e.printStackTrace();

}finally{if(fileOutputStream != null){try{

fileOutputStream.close();

}catch(IOException e) {

e.printStackTrace();

}

}

}

}

}

运行结果:

33c675b405a496b95a5b0631c51735e8.png

案例(InputSteam):

importjava.io.FileInputStream;importjava.io.FileNotFoundException;importjava.io.IOException;public classPublicTest {public static voidmain(String[] args) {

FileInputStream fileInputStream= null;try{

fileInputStream= new FileInputStream("demo.txt");int ch =0;byte[] arr = new byte[fileInputStream.available()]; //正式写代码不要使用fileInputStream.available(),因为文件比较大的时候内存会不够用。

while((ch = fileInputStream.read(arr)) != -1){

System.out.println(new String(arr,0,ch));

}

}catch(FileNotFoundException e) {

e.printStackTrace();

}catch(IOException e) {

e.printStackTrace();

}finally{if(fileInputStream != null){try{

fileInputStream.close();

}catch(IOException e) {

e.printStackTrace();

}

}

}

}

}

运行结果:

03f52084bca83ee96cbd9e5e63afe425.png

案例:复制一个视频文件

importjava.io.FileInputStream;importjava.io.FileNotFoundException;importjava.io.FileOutputStream;importjava.io.IOException;public classPublicTest {public static voidmain(String[] args) {

FileOutputStream fileOutputStream= null;

FileInputStream fileInputStream= null;try{

fileInputStream= new FileInputStream("video.avi");

fileOutputStream= new FileOutputStream("video1.avi");int ch =0;byte[] arr = new byte[fileInputStream.available()]; //正式写代码不要使用fileInputStream.available(),因为文件比较大的时候内存会不够用。

while((ch = fileInputStream.read(arr)) != -1){

fileOutputStream.write(arr);

}

}catch(FileNotFoundException e) {

e.printStackTrace();

}catch(IOException e) {

e.printStackTrace();

}finally{if(fileInputStream != null){try{

fileInputStream.close();

}catch(IOException e) {

e.printStackTrace();

}

}if(fileOutputStream != null){try{

fileOutputStream.close();

}catch(IOException e) {

e.printStackTrace();

}

}

}

}

}

运行结果:

fdaf1264d5ed3ae55bd6068a414966a8.png

转换流(键盘输入和控制台输出作为案例):

import java.io.*;public classvar {public static voidmain(String[] agrs){

OutputStream out= System.out; //控制台打印

OutputStreamWriter outputStreamWriter = null;

outputStreamWriter= new OutputStreamWriter(out); //outputStreamWriter = new OutputStreamWriter(out,"GBK"); 可以指定写的编码

BufferedWriter bufferedWriter = newBufferedWriter(outputStreamWriter);

InputStream in= System.in; //键盘输入流。

InputStreamReader inputStreamReader = new InputStreamReader(in); //InputStreamReader inputStreamReader = new InputStreamReader(in,"BGK"); 同样可以指定编码

BufferedReader bufferedReader = newBufferedReader(inputStreamReader);try{

String line= null;while((line = bufferedReader.readLine()) != null){if("exit".equals(line)){break;

}

bufferedWriter.write(line);

bufferedWriter.flush();

}

}catch(IOException e) {

e.printStackTrace();

}finally{try{if(bufferedWriter != null){

bufferedWriter.close();

}if(bufferedReader != null){

bufferedReader.close();

}

}catch(IOException e) {

e.printStackTrace();

}

}

}

}

运行结果:

1d3e57e0f6e5766e9ae840478290d0e9.png

IO流先讲到这里,Java IO流还有很多有意思的类和方法见API。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值