Java基础(IO输入输出流,读写文件操作,对象序列化)

IO

输入输出流基本概念

输入流:信息从程序空间之外的地方流入程序空间里面

输出流:信息从程序空间里面流到程序空间之外的地方

输入输出流的分类

  • 从流的方法划分

    • 输入流
    • 输入流
  • 从流的分工划分

    • 节点流:访问文件进行输入输出操作的流
    • 处理流:在节点流的基础之上对信息进行加工转换处理的流
  • 从流的内容划分

    • 面向字符的流:专门处理字符数据
    • 面向字节的流:用于一般目的即输入输出

在这里插入图片描述

所有的输入输出流类都继承于以上四个类

  • 面向字符的流的超类为Reader&Writer

  • 面向字节的流的超类为InputStream&OutputStream

举一个简单的例子,复制一个文件的内容到另一个文件中

首先在该项目的文件所在位置新建一个Redirecting.txt文件

import java.io.*;

public class Redirecting {
    public static void main(String[] args) throws FileNotFoundException {
        BufferedInputStream in = new BufferedInputStream(
                new FileInputStream("Redirecting.txt")); 
        //FileInputStream就是一个面向字节的流,然后再通过BufferedInputStream来转化,
        //BufferedInputStream也是一个流,是一个缓冲流
        PrintStream out = new PrintStream(new
                BufferedOutputStream(new FileOutputStream("test.txt")));
        System.setIn(in); 
        //将输入流重定向到Redirecting文件中,相当于本来我们是从键盘输入,现在变成从文件来输入
        System.setOut(out);
        //将输出流重定向到test.txt文件中,本来应该是输出到显示器上,现在输出到test文件中
        System.setErr(out);
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        //BufferedReader是一个面向字符的流,因为BufferedReder只处理信息,但是不读取信息
        //因此我们需要用一个InputStreamReader来从文件中读取信息,再由BufferedReader转换
        String s;
	    while((s=br.readLine())!=null)
		    System.out.println(s);
            //因为我们已经输出流定向到test.txt文件中了,所以我们这里相当于复制的操作
	    in.close();
	    out.close();
    }
}

写文本文件

import java.io.*;

public class FileWriterTester {

    public static void main(String[] args) throws IOException {
        // TODO Auto-generated method stub
        String fileName = "Hello.txt";
        FileWriter writer = new FileWriter(fileName);
        writer.write("Hello World!");
        writer.close();
    }
}

如果有大量的信息要写入文件,可以使用BufferedWriter

import java.io.*;

public class FileWriterTester {

    public static void main(String[] args) throws IOException {
        // TODO Auto-generated method stub
        String fileName = "Hello.txt";
        BufferedWriter out = new BufferedWriter(new FileWriter(fileName));
        //跟前面说的一样,BufferedWriter也不直接对文件信息进行读取,它只处文件信息
        //因此我们需要用一个FileWriter来读取文件,再转换为BufferedWriter
        out.write("Hello World!");
        out.newLine(); //跨平台的换行,\n不一定在各个平台都是换行
        out.close();
    }
}

读文本文件

import java.io.*;

public class FileWriterTester {

    public static void main(String[] args) throws IOException {
        // TODO Auto-generated method stub
        String fileName = "Hello.txt";
        BufferedReader in = new BufferedReader(new FileReader(fileName));
        //使用BuffereReader类可以按行读取
        String c = in.readLine();
        while(c!=null)
        {
        	System.out.println(c);
        	c=in.readLine();
        }         	
    }
}

Reader类有一个read方法,返回文件中字符的ASCLL码

import java.io.*;

public class FileWriterTester {

    public static void main(String[] args) throws IOException {
        // TODO Auto-generated method stub
        String fileName = "Hello.txt";
        FileReader in = new Fi
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值