java–io流写入数据
第一部分
FileOutputSteam的构造器因为我传了个true,这个true是用来实现追加效果的,也就是你再次运行这段代码的时候它会在原本这个文件内容的基础上追加代码中新写入的内容,不会因为每次运行而刷新掉之前的内容
初始示例(未处理异常版本)
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
public class test {
public static void main(String[] args) throws IOException {
FileOutputStream fo = new FileOutputStream("haha.txt", true);
String string = "abcd";
/*
字节流实现换行:
win: \r\n
linux \n
mac \r
*/
String string2 = "\r\n";
for (int i = 0; i < 2; i++) {
//传入的是一个字节数组
fo.write(string.getBytes(StandardCharsets.UTF_8),1,3);
//因为是静态方法所以可以不需要创建对象直接使用
fo.write("\r\n".getBytes(StandardCharsets.UTF_8));
fo.write("ABCD".getBytes(StandardCharsets.UTF_8),1,3);
//两次换行效果,用来区分下次追加的内容
fo.write(string2.getBytes(StandardCharsets.UTF_8));
fo.write(string2.getBytes(StandardCharsets.UTF_8));
}
fo.close();//关闭io流对象,释放系统资源
}
}
第二部分
我们要处理异常的原因
这一部分非常重要
io流中有很多的风险,因为是编译型异常,不处理异常的话无法正常编译
我们在上面例子中只是用了throws处理了
我们下面用trycatchfinally来正式处理
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
public class test {
public static void main(String[] args){
/*
* 为什么要在这里单独定义并且给null值呢呢?
* 1、假如把FileOutputStream定义
* 2、假如不给fo赋值后面的fo.close();中的fo会报错,
* 原因是计算机不知道我们是否创建了对象*/
FileOutputStream fo = null;
try{
fo = new FileOutputStream("E:\\test\\文本文档.txt");
fo.write("bilibili牛逼".getBytes(StandardCharsets.UTF_8));
}catch (IOException e){
e.printStackTrace();
}finally {
/*
* 这里的if是为了防止空指针异常,
* 当"文本文档.txt"在路径下找不到时,就会给fo个null值,
* 而我们一开始就赋值了一个null,所以为了保证健壮性
* 我们需要用if判空,为空则不需要进行close
* */
if (fo != null){
try {
fo.close();//关闭io流对象,释放系统资源
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}