带你了解Java的输入/输出(I/O)流

一、字节I/O流

简介:Java的字节流主要用来实现字节的输入输出,主要针对一些字节类型的文件,对象,数据等,这些数据流可以读写到文件系统中,可以在网络上传输以及其他的操作。Java的输入流一般使用抽象类InputStream的子类对象来创建,如要读取文件的输入流,可以使用FileInputStream对象,当然文件输出流则可以使用FileOutPutStream对象。

用法:一般使用向上转型的方法来创建输入输出流,在以下案例中,使用文件输入输出流读取一个二进制文件的数据,并把该文件保存到另一个位置,即实现复制粘贴文件的操作。主要流程是通过FileInputStream对象的read()方法读取文件的输入流,将输入流写入字节数组中,然后用FIleOutputStream对象的write()方法将读取的字节流数组写入到文件中,完成文件的操作,另外,在完成操作后一定要使用对象的close()方法将字节流关闭。

package com.csdn.bk.fileio;

import java.io.*;


public class FileRead {

    public static void main(String[] args) throws IOException {
        Stream s = new Stream();
        s.copyFile("G:\\VisualStudioSetup.exe","D:\\VisualStudioSetup.exe");
    }
}

/**
 * 读取二进制文件并存储到另一位置
 */
class Stream{
    public void copyFile(String inFilePath,String outFilePath){//两个字符串分别对应要读取的文件路径以及要存放的文件路径
        try {
            File infile = new File(inFilePath);                 //用文件路径建立file对象
            File outfile = new File(outFilePath);
            InputStream in = new FileInputStream(infile);       //使用fileInputStream文件输入流对象进行读操作
            OutputStream out = new FileOutputStream(outfile);   //使用fileoutputStream文件输入流对象进行写操作
            byte[] bytes = new byte[10240];                     //建立字节数组临时存放文件字节流
            while ((in.read(bytes))!=-1){                       //字节流写入输出流,保存到文件
                out.write(bytes);
            }
            out.close();                                        //关闭字节流
            in.close();
            System.out.println("保存成功");
        }catch (IOException e){
            System.out.println("保存失败:"+e.getMessage());
        }

    }
}

二、字符输入输出流

简介:Java字符输入/输出流主要针对的是字符的输入与输出,如控制台文本的读取或文本文件的读写,字符输入输出流主要使用抽象类Reader/Writer的子对象来完成特定的操作。

用法:字符输入输出流也使用向上转型的方法来使用,以下案例主要使用FileReader对象读以及BufferedReader对象读取文本文件的内容并显示在控制台上,主要流程即为使用File对象构造出FileReader对象,获取文件的字符流,并将字符流给到BufferedReader对象,调用BufferedReader对象的readLine()方法读取一行并进行输出 ,要读取全部文件内容可使用循环的方法。

package com.csdn.bk.fileio;

import java.io.*;


public class StrRead {

    public static void main(String[] args) throws IOException {
        Read read = new Read();
        read.readOutPut("D:\\hellofontlogs.txt");
    }
}
/**
 * 读取文本文件并在控制台显示
 */
class Read{
    public void readOutPut(String file) {
        try {
            File f = new File(file);                            //根据文件路径建立file对象
            FileReader reader = new FileReader(f);              //使用Reader子类filereader进行文本读操作
            BufferedReader bfr = new BufferedReader(reader);    //使用Bufferedreader对象对字符读取
            while (bfr.ready()){                                //每次读取一行并输出
                System.out.println(bfr.readLine());
            }
            System.out.println("保存成功");
        }catch (IOException e){
            System.out.println("保存失败:"+e.getMessage());
        }

    }
}

以下使用一个案例演示获取控制台输入的文本并写入到文本文件中:

package com.csdn.bk.fileio;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Reader;
import java.util.Scanner;

/**
 * 读取控制台字符串并存入文本文件
 */
public class StrWrit {


    public static void main(String[] args) throws IOException {
        Write write = new Write();
        write.inputWrite("d:\\a.txt");
    }

}


class Write{
    public void inputWrite(String filepath) throws IOException {

        File file = new File(filepath);
        FileWriter writer = new FileWriter(file);               //filewriter对象进行文件字符写操作
        Scanner scanner = new Scanner(System.in);               //开启控制台输入
        System.out.println("输入要保存的字符串");
        String str = scanner.nextLine();                        //获取输入的字符串
        writer.write(str);                                      //写入文件
        writer.close();
        System.out.println("保存成功");
    }
}

值得注意的是,每个I/O流操作都会被抛出一个异常,这些异常类型有很多,自己根据特定的异常进行选择抛出或捕获执行即可。

I/O流还有许多复杂的操作,以上只是简单的介绍了字节I/O流以及字符I/O流的一部分使用方法,只能在特定的条件下使用,其他的操作视情况而定哦。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值