2017.12.04 java输入输出流

本文详细介绍了Java中的IO流概念及分类,包括字节流与字符流的区别和应用场景,并提供了具体的代码示例,如文件的读取与复制等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

拖了一个星期了……最近感觉自己很浪费时间在没有意义的事情上………

IO流分类

1.流向
输入流,输出流
2.数据
字节流:二进制,可以一切文件,包括表示输入流的InputStream类,表示输出流的OutputStream类。
字符流:只能处理纯文本,常用于读写Unicode字符(16位),包括表示输入流的Reader类,表示输出流的Writer类。
3.功能:
节点流:包裹源头
处理流:增强功能,提供性能

1.字节流和字符流
字节流:二进制,可以一切文件,包括表示输入流的InputStream类,表示输出流的OutputStream类。

输入流:InputStream
read(byte[] b)
read(byte[] b,int off,int len)
close
输出流:OutputStream
write(byte[],int off int len)
Flush
close

字符流:只能处理纯文本,常用于读写Unicode字符(16位),包括表示输入流的Reader类,表示输出流的Writer类。

输入流:Reader
read(char[] cbuf) read(char[],int off,int len) close()
FileReader
输出流:Writer
writer(char[] cbuf) read(char[],int off,int len) flush close
FIleWriter

操作:
读取文件
建立与文件联系—>选择对应流 读取 数组—>关闭资源

2.目录和文件操作
File类
文件和目录路径名的抽象表示形式。一个File对象可以代表一个文件或目录,但不是完全对应的。建立File对象不会地文件系统产生影响。
文件中是一个联系,不能直接对文件进行操作。

处理流
节点流:可以直接从数据源或目的地读写数据
处理流:不直接连接到数据源或目的地,是处理流的流。通过对其他流的处理提高程序的性能。
缓冲流
BufferedWriter, BufferedReader
BufferedInputStream,BUfferedOutputStream
转换流:字节流转为字符流 处理乱码(编码,解码)
编码: 字符 – 编码字符集  二进制
解码: 二进制 –解码字符集  字符
乱码:
编码,解码字符集不统一
长度不够
InputStreamReader,OutputStreamWriter

1.读出一个文件

[cpp] view plain copy
package work04;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;

public class Demo01 {

// 读出文件  
public static void main(String[] args) throws IOException {  
    // TODO Auto-generated method stub  
    // 如果没有文件则需创建文件  
    File file = new File("D:/bkg.jpg");  
    if (!file.exists()) {  
        file.createNewFile();  
    }  

    // 定义一个输入的字节流  
    InputStream is = new FileInputStream(file);  
    byte[] buf = new byte[1024];  
    System.out.println(is.read(buf));  
    for (int i = 0; i < buf.length; i++) {  
        // 下面更改样式加上回车  
        System.out.print(Integer.toBinaryString(buf[i]));  
    }  
    is.close();  

}  

}

2.复制文件

[java] view plain copy
package work04;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

public class Demo02 {

// 复制文件  
public static void main(String[] args) throws IOException {  
    // TODO Auto-generated method stub  
    File file = new File("D:/bkg.jpg");  
    File filee = new File("D:/wxy01.jpg");  
    if (!filee.exists()) {  
        filee.createNewFile();  
    }  
    InputStream is = new FileInputStream(file);  
    OutputStream os = new FileOutputStream(filee);  
    byte[] buffer = new byte[1024];  
    int len = 0;// 不加len的话文件大小不一样  
    while ((len = is.read(buffer)) != -1) {  
        os.write(buffer, 0, len);  
    }  
    os.close();  

}  

}

仅复制一半
[java] view plain copy
package work04;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

public class Demo0202 {

// 复制文件  
public static void main(String[] args) throws IOException {  
    // TODO Auto-generated method stub  
    File file = new File("E:/io/huhu.jpg");  
    System.out.println("源文件的长度:" + file.length());  
    File filee = new File("E:/io/hu01.jpg");  
    if (!filee.exists()) {  
        filee.createNewFile();  
    }  
    InputStream is = new FileInputStream(file);  
    OutputStream os = new FileOutputStream(filee);  
    byte[] buffer = new byte[1024];  
    int len = 0;// 不加len的话文件大小不一样  
    int sum = 0;  
    while ((len = is.read(buffer)) != -1) {  
        sum += len;  
        os.write(buffer, 0, len);  
        if (sum >= file.length() / 2) {  
            break;  
        }  
        /* 
         * if(sum<=file.length()/2){ os.write(buffer,0,len); } 
         */  

    }  
    os.close();  
}  

}

3.字符流的读出和复制
[java] view plain copy
package work04;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;

public class Demo03 {

public static void main(String[] args) throws IOException {  
    // TODO Auto-generated method stub  
    File file= new File("D:/01.txt");  
    if(!file.exists()){  
        file.createNewFile();  
    }  
    Writer wr=new FileWriter(file);  
    wr.write("希望每个人都能珍惜");  
    wr.close();  

}  

}

[java] view plain copy
package work04;

import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Reader;
import java.io.Writer;

public class Demo0303 {

public static void main(String[] args) throws IOException {  
    // TODO Auto-generated method stub  

    File file = new File("D:/01.txt");  
    File filee = new File("D:/011.txt");  
    if (!filee.exists()) {  
        filee.createNewFile();  
    }  
    Reader re = new FileReader(file);  
    Writer wr = new FileWriter(filee);  
    char[] buffer = new char[1024];  
    int len = 0;// 不加len的话文件大小不一样  
    while ((len = re.read(buffer)) != -1) {  
        wr.write(buffer, 0, len);  
    }  
    re.close();  
    wr.close();  

}  

}

4.网站中的html转换
[java] view plain copy
package work04;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;

public class Demo05 {

public static void main(String[] args) throws IOException {  
    // TODO Auto-generated method stub  
    URL url = new URL("https://www.baidu.com/");  
    URLConnection urlcon = url.openConnection();  
    InputStream is = urlcon.getInputStream();  
    // 使用gb2312编辑  
    File filee = new File("D:/05.txt");  
    if (!filee.exists()) {  
        filee.createNewFile();  
    }  

    OutputStream os = new FileOutputStream(filee);  
    byte[] buffer = new byte[1024];  
    int len = 0;// 不加len的话文件大小不一样  
    while ((len = is.read(buffer)) != -1) {  
        os.write(buffer, 0, len);  
    }  
    os.close();  
}  

}

[java] view plain copy
package work04;

import java.io.File;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.Reader;
import java.io.Writer;

public class Demo333 {

public static void main(String[] args) throws IOException {  
    // TODO Auto-generated method stub  
    // 使用gb2312编码  
    File file = new File("E:/io/01.txt");  
    // 使用utf-8  
    File filee = new File("E:/io/01_utf8.txt");  
    if (!filee.exists()) {  

        filee.createNewFile();  
    }  
    Reader re = new FileReader(file);  
    OutputStreamWriter owr = new OutputStreamWriter(new FileOutputStream(  
            filee), "utf-8");  
    char[] buffer = new char[1024];  
    int len = 0;// 不加len的话文件大小不一样  
    while ((len = re.read(buffer)) != -1) {  
        owr.write(buffer, 0, len);  
    }  
    re.close();  
    owr.close();  

}  

}

5.串行化
对象的寿命通常随着生成该对象的程序的终止而终止。有时候,可能需要将对象的状态保存下来,在需要时再将对象恢复。我们把对象的这种能记录自己的状态以便将来再生的能力。叫作对象的持续性(persistence)。对象通过写出描述自己状态的数值来记录自己,这个过程叫对象的串行化(Serialization)。串行化的主要任务是写出对象实例变量的数值。如果变量是另一对象的引用,则引用的对象也要串行化。
在java.io包中,接口Serialization用来作为实现对象串行化的工具 ,只有实现了Serialization的类的对象才可以被串行化。
Serializable接口中没有任何的方法。当一个类声明要实现Serializable接口时,只是表明该类参加串行化协议,而不需要实现任何特殊的方法。

[java] view plain copy
package work04;

import java.io.Serializable;

public class Demo06 implements Serializable {

private String name;  
private int age;  

public String getName() {  
    return name;  
}  

public void setName(String name) {  
    this.name = name;  
}  

public int getAge() {  
    return age;  
}  

public void setAge(int age) {  
    this.age = age;  
}  

}

[java] view plain copy
package work04;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;

public class Demo0606 {

public static void main(String[] args) throws ClassNotFoundException,  
        IOException {  
    // TODO Auto-generated method stub  

    /* 
     * Demo01 s1=new Demo01(); s1.setName("222"); s1.setAge(19); 
     * FileOutputStream os=new FileOutputStream("d:/a01.dat"); 
     * ObjectOutputStream oos=new ObjectOutputStream(os); 
     * oos.writeObject(s1); oos.close(); 
     */  
    FileInputStream fis = new FileInputStream("d:/a01.dat");  
    // 将对象恢复过来  
    ObjectInputStream ois = new ObjectInputStream(fis);  
    // 不知道这个是什么,强制转换,若找不到则会抛出异常  
    Demo06 s2 = (Demo06) ois.readObject();  

    System.out.println(s2.getName());  

}  

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值