Java的IO流简述和实例练习

版权声明:本文为博主原创文章,如需转载请先联系作者后注明出处 https://blog.csdn.net/weixin_42158633/article/details/89341282

Java.io包

Java的核心库java.io提供了全面的IO接口。包括:文件读写、标准设备输出等。Java中IO是以流为基础进行输入输出的,所有数据被串行化写入输出流,或者从输入流读入。

描述:通过数据流、序列化和文件系统提供系统输入和输出。

什么是流? 流是一个很形象的概念,当程序需要读取数据的时候,就会开启一个通向数据源的流,这个数据源可以是文件,内存,或是网络连接。类似的,当程序需要写入数据的时候,就会开启一个通向目的地的流。这时候你就可以想象数据好像在这其中“流”动一样。

分类

  • 从流向上分:
    • 输入流:程序可以从中读取数据的流。(磁盘→内存)
    • 输出流:程序能向其中写入数据的流。(内存→磁盘)
  • 从单位上分 :
    • 字节流:以字节为单位传输数据的流
    • 字符流:以字符为单位传输数据的流
    • 缓冲流:缓冲流是对文件流处理的一种流

在这里插入图片描述

1.1 字节流

其中:字节输入流:InputStream,子类:FileInputStream
练习:读取一个txt文件:

public static void main(String[] args) throws IOException {
    //实例化字节输入对象
    FileInputStream fis = new FileInputStream("H:\\文档文件\\ubuntu-get.txt");

int count = 0;
byte[] b = new byte[1024];
StringBuffer sb = new StringBuffer();
while(fis.read(b)!=-1){  //读入缓冲区的字节总数,如果因为已经到达文件末尾而没有更多的数据,则返回 -1。
    String str = new String(b);
    sb.append(str);
    count++;
}
System.out.println(sb.toString());
System.out.println(count);

//关闭资源
fis.close();

输出:(中文有乱码)// 读写文件, 以二进制读写, 有乱码, 是由于输入输出格式转换的原因

sudo add-apt-repository ppa:unbutu-toolchain-r/test

sudo apt-get update    
apt-get upgrade         //�������ļ���
apt-get dist-upgrade        

sudo add-apt-repository ppa:tualatrix/ppa  
sudo apt-get update  
sudo apt-get install ubuntu -tweak                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     
1
1.2 字符流

以上代码由于是二进制写入,可能存在乱码,你可以使用以下代码实例来解决乱码问题:
其中
字符输出流:Writer,子类:OutputStreamWriter
字符输入流:Reader,子类:InputStreamReader
用字符输出流写入一个文件,再用输入流读出文件内容
实例:

  public static void main(String[] args) throws IOException {

    File f = new File("H:\\文档文件\\a.txt");
    FileOutputStream fop = new FileOutputStream(f);
    // 构建FileOutputStream对象,文件不存在会自动新建
    OutputStreamWriter writer = new OutputStreamWriter(fop, "UTF-8");
    // 构建OutputStreamWriter对象,参数可以指定编码,默认为操作系统默认编码,windows上是gbk
    writer.append("中文输入");
    writer.append("\r\n");//\r return,输入光标回到行的开头(回车) \n newline,换行
    // 换行
    writer.append("English");
    writer.close(); // 关闭写入流
    fop.close();// 关闭输出流,释放系统资源

    FileInputStream fip = new FileInputStream(f);
    InputStreamReader reader = new InputStreamReader(fip, "UTF-8");
    // 构建InputStreamReader对象,编码与写入相同
    StringBuffer sb = new StringBuffer();
    while (reader.ready()) {
        sb.append((char) reader.read());
        // 转成char加到StringBuffer对象中   read():读取单个字符
    }
    System.out.println(sb.toString());
    reader.close(); // 关闭读取流
    fip.close(); // 关闭输入流,释放系统资源

}

输出:
在这里插入图片描述

中文输入
English
1.3 缓冲流

从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取。

缓冲输入流:BufferedReader
实例:

public static void main(String[] args) throws IOException {
    //字节流对象
    FileInputStream fis = new FileInputStream("H:\\文档文件\\a.txt");
    //字符流对象
    InputStreamReader isr = new InputStreamReader(fis);
    //缓冲流对象
    BufferedReader bufferedReader = new BufferedReader(isr);

    

    //便捷方法   
    /*class FileReader extends InputStreamReader 构造方法:FileReader(File file)*/
    //BufferedReader mybr = new BufferedReader(new FileReader("H:\\文档文件\\a.txt"));
    String s ;
    int i =0;
    while ((s=bufferedReader.readLine())!=null){
        System.out.println(s);
        i++;
    }
    System.out.println(i);
    //关闭资源
    fis.close();
    isr.close();
    bufferedReader.close();

}

输出:

中文输入
English
第三行
3    

缓冲输出流:BufferedWriter
public class BufferedWriter extends Writer
将文本写入字符输出流,缓冲各个字符,从而提供单个字符、数组和字符串的高效写入。
实例:

public static void main(String[] args) throws IOException {
    BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter("H:\\文档文件\\b.txt"));
    bufferedWriter.write("这是write(String str);方法1");
    bufferedWriter.newLine(); //写入一个行分隔符。
    bufferedWriter.write("这是write(String str);方法2");
    bufferedWriter.newLine();
    //相当于
    bufferedWriter.write("第一行\r\n第二行");
    //关闭资源
    bufferedWriter.close();

}

输出文件中内容:
b.txt

这是write(String str);方法1
这是write(String str);方法2
第一行
第二行

参考:http://www.runoob.com/java/java-files-io.html

猜你喜欢

转载自blog.csdn.net/weixin_42158633/article/details/89341282