1.字节输入流
字节输入流
1.Output 输出 写文件 写出去(程序->文件 往外输出)
2.Intput 输入读文件 读进来(文件->程序 输入)
1.OutPutStream 是抽象 是所有输出流的父类
2.一次写入一个字节 一个字节8个二位进制
1.读取文件的布骤
1.绑定数据源文件(要读哪个文件)
2.使用read方法
3.关闭资源
注意:字节流写入的是一个字节一个字节的的写入
读取也是一个字节一个字节的读取.
2.字节流读取内容为hello的long.txt文件
public class text {
public static void main(String[] args) throws IOException {
File file = new File("/Users/lanou/Desktop/test/long.txt");
FileInputStream iStream = new FileInputStream(file);
//读取
int i1 = iStream.read();//读取一个字节内容
System.out.println(i1);//输出该内容对于的ASCII码对应的数字
i1 =iStream.read();
System.out.println(i1);
i1 =iStream.read();
System.out.println((char)i1);//将给对应内容转回原字符
i1 =iStream.read();
System.out.println((char)i1);
i1 =iStream.read();
System.out.println((char)i1);
iStream.close();
}
}
运行结果:
104
101
l
l
o
-1
结论:结果为-1说名读取到空读取结束
3.构造方法
参数有
1.文件(被写入的文件)
2.文件路径(被写入的路径)
写入文件的路径
1.绑定要写入的文件 或者 文件的路径
2.使用write 方法写入
3.关闭资源
绑定数据的目的地(绑定要写入的文件)
该路径下没有该文件会帮你创建出来
如果已经有了会覆盖掉
public class text {
public static void main(String[] args) throws IOException {
File file = new File("/Users/lanou/Desktop/test/ong.txt");
FileOutputStream oStream = new FileOutputStream(file);
// 写入数据100
oStream.write(49);//输入按ASCII表的值输入
oStream.write(48);
oStream.write(48);
//用字节数组写入ABCD
byte[] bs ={65,66,67,68};
oStream.write(bs);
//按字节数组的索引和长度写入
oStream.write(bs,1,2);//从角标1开始读取一次读2个单位字节
//简单写法
oStream.write("www".getBytes());
oStream.write("www".getBytes());
oStream.close();//关闭资源
}
}
运行结果:创建了一个在test文件夹中的ong.txt文件,
并且写入数据内容 100ABCDBCwwwwww
4.文件续写与换行
public class text {
public static void main(String[] args) throws IOException {
File file = new File("/Users/lanou/Desktop/test/ong.txt");
FileOutputStream oStream = new FileOutputStream(file,true);
oStream.write("www\n".getBytes());
oStream.close();//关闭资源
}
}
5.异常处理
public class text {
public static void main(String[] args) throws IOException {
File file = new File("/Users/lanou/Desktop/test/ong.txt");
// 增加作用域
FileOutputStream oStream = null;
try {
// 创建了一个流
// 只要是你手动创建了流 你就需要手动关闭它
oStream = new FileOutputStream(file);
// 写入
oStream.write("hel".getBytes());
} catch (FileNotFoundException e) {
// 抛出运行时异常(直接停止掉程序)
throw new RuntimeException("文件找不到");
} catch (IOException e) {
// 文件编写失败 直接停掉程序
throw new RuntimeException("文件编写失败");
}finally {
// 关闭资源
try {
// 非空判断
// 如果是空的 说明流创建失败了 失败了就不用关了
if(oStream != null) {
oStream.close();
}
} catch (IOException e) {
// 关闭资源失败 停止程序
throw new RuntimeException("关闭失败");
}
}
}}
##
1.使用数组读取文件
public class text {
public static void main(String[] args) throws IOException {
File file = new File("/Users/lanou/Desktop/test/ong.txt");
// 使用字节数组 读取文件
FileInputStream iStream = new FileInputStream(file);
// 声明了一个长度为2的 空的 字节数组
// 读取时 会把读出来的字节放进字节数组存储
byte[] b = new byte[2];
int i1 = iStream.read(b);
System.out.println(i1);
// 利用字符串的构造方法 直接打印字符串
System.out.println(new String(b));
i1 = iStream.read(b);
System.out.println(i1); // 2
// 利用字符串的构造方法 直接打印字符串
System.out.println(new String(b)); //cd
i1 = iStream.read(b);
System.out.println(i1);
// 利用字符串的构造方法 直接打印字符串
System.out.println(new String(b));
i1 = iStream.read(b);
System.out.println(i1);
// 利用字符串的构造方法 直接打印字符串
System.out.println(new String(b));
iStream.close();
}}
运行结果:
2
he
2
ll
1
ol
-1
ol
2.循环读取
// read方法 每调用一次 就读取一个字节
// 循环的时候 read方法只能出现一次
// 声明一个变量 保存读出来的结果
File file = new File("/Users/lanou/Desktop/test/ong.txt");
FileInputStream iStream = new FileInputStream(file);
int i = 0;
while((i = iStream.read())!= -1) {
System.out.print((char)i);
}
运行结果:
hello