一、字节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流的一部分使用方法,只能在特定的条件下使用,其他的操作视情况而定哦。