33 文件IO流(二)
33 文件IO流(二)
1 IO流分类
分类依据:
流向程序里面还是流到程序外面
分类结果:(以最基础的举例)
A 、输入流
字节输入流 File(来源)InPutStream
a. 作用:
从指定地址的文件读取数据到程序中
b. 具体操作方法
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
public class TestRead {
public static void main(String[] args) {
File file=new File("C:\\Users\\SSS翱翔万里\\Desktop\\测试.txt");
//首先你得判断它是否是文件
if(file.isFile()){
//如果是,就读取它里面的内容
FileInputStream fileInputStream=null;
byte[] bytes=null;
try {
fileInputStream = new FileInputStream(file);
int length=0;
bytes= new byte[1024*8];
while((length=fileInputStream.read(bytes))!=-1){
System.out.print(new String(bytes,0,length));
//bytes数组存放的数据,最后一次可能不为满,
//所以长度为每次的有效长度是最好的
}
} catch (Exception e) {
e.printStackTrace();
}
finally {
//finally中的语句是无论有无异常都会执行完的
//注意:虽然不关闭流,系统会自动帮你关闭且一般不会报错,但还是建议按标准流程来
try {
fileInputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}else{
System.out.println("给的地址不是一个文件");
}
}
}
c.运行截图
B、输出流
字节输入流 File(来源)OutPutStream
a.作用:
把程序中的数据写到指定的文件里头
b.具体操作:
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Scanner;
public class TestWrite {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
System.out.println("请输入你要写入的字符串");
String str=scanner.next();
File file=new File("C:\\Users\\SSS翱翔万里\\Desktop\\测试.txt");
//首先你得判断它是否是文件
if(file.isFile()){
//如果是,就开始下面的往里面去写的操作
FileOutputStream fileOutputStream=null;
byte[] bytes=null;
try {
//如果不写true,则默认是覆盖原来的内容
fileOutputStream = new FileOutputStream(file,true);
//因为是字节流,所以得把字符串转换成bytes[]数组
fileOutputStream.write(str.getBytes());
} catch (Exception e) {
e.printStackTrace();
}
finally {
//finally中的语句是无论有无异常都会执行完的
//注意:虽然不关闭流,系统会自动帮你关闭且一般不会报错,但还是建议按标准流程来
try {
fileOutputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}else{
System.out.println("给的地址不是一个文件");
}
}
}
c.运行截图:
(1)
(2)
(3)
2. 总结
-
输入流和输出流都是需要关闭的.(为防止忘记写,在建立实例化完流对象操作时,就在下面一行写该对象的关闭操作)
-
为了防止输入流和输出流的源头不存在,会抛出FileNotFoundException异常,可以人为的去加个if条件判断
-
对文件进行输出流操作时,默认为覆盖操作,若想追加,直接令调用构造方法,传递的参数除了文件对象(含有文件的地址信息),后面再加上true;
fileOutputStream = new FileOutputStream(file,true);