1.io流就是存储和读取数据的解决方案
i:input o:output
2.iOS流用于读写数据
3.io流按流的方向分为两种,一种是输入流,也就是读取,一种是输出流,也就是写出。
按照操作文件类型也可以分为两种,一种是字节流(可以弄所有类型的文件),一种是字符流(只可以纯文本文件)。纯文本文件:用windows自带的记事本打开能读懂的文件。
iO流分为两种,一种是字节流,字节流又分为两种:1.inputStream字节输入流。2.outputStream字节输出流。字符流也分为两种:Reader字符输入流,Writer字符输出流。
FileOutputStream文件输出,操作本地文件的字节输出流,可以把程序中的数据写到本地文件中,
书写步骤:1.创建字节输出流对象;2.写数据;3.释放资源。
我写了一个代码,以供大家和我进行理解
public class Demo1 {
public static void main(String[] args) throws Exception {
//创建对象
FileOutputStream stream=new FileOutputStream("Game\\a.txt");
//写出数据
stream.write(98);
//3.释放资源
stream.close();
}
}
此时,我们看a文件,a文件里多出了一个b,说明我们的代码没有问题,在代码中写了啥,那么文件中就多了啥。
字节输出流的细节
1.创建字符串表示的路径或者是File的对象都是可以的
2.文件不存在会创建一个新的文件,但是要保证父级路径是存在的。
3.如果文件已经存在,那么,会清空文件
写出数据的小细节
1.write方法的参数是整数,但是实际上是写到本地文件中的都是整数在ASCII上对应的字符
释放资源的小细节
每次使用完之后都要释放资源
void write(int b);一次写一个字节数据
void write(byte[] b);一次写一个字节数组数据
void write (byte[] b,int off,int len)一次写一个字节数组的部分数据。
前两个方法没啥好说的,大家见名知意,第三个数组复杂一些
第一个参数指的是数组,第二个参数指的是起始索引,第三个参数指的是个数。
我写了一串代码,供大家理解,如下:
public class Demo1 {
public static void main(String[] args) throws Exception {
//创建对象
FileOutputStream stream=new FileOutputStream("Game\\a.txt");
byte bytes[]={97,98,99,100,101};
//写出数据
stream.write(bytes,1,3);
//3.释放资源
stream.close();
}
}
这时,书写的格式中的意思就是指在bytes这个数组中,从1索引开始,写3个字节到文件中去,所以,最后的运行结果是bcd。
接下来,介绍写出数据的两个小问题:1.换行写 2.续写,不清空。
面对以上两个问题,我先介绍一个方法,就是getBytes方法,他的参数是字符串类型的,而且返回的是bytes类型的,非常方便,我们只需定义一个字符串,然后调用这个方法就可以了。
我写了如下代码:
public class Demo1 {
public static void main(String[] args) throws Exception {
//创建对象
FileOutputStream stream=new FileOutputStream("Game\\a.txt");
String str="zhangwenchao666";
byte b[]=str.getBytes();
System.out.println(b.toString());
//写出数据
stream.write(str.getBytes());
stream.close();
}
}
非常方便。
接下来,就开始我们的第一个问题,如果需要换行,应该怎么办
其实很简单,只需要在两个write方法之间写一个换行符就可以了,如下:
public class Demo1 {
public static void main(String[] args) throws Exception {
//创建对象
FileOutputStream stream=new FileOutputStream("Game\\a.txt");
String str="zhangwenchao";
String str2="666";
String str3="\r\n";
//byte b[]=str.getBytes();
//System.out.println(b.toString());
//写出数据
stream.write(str.getBytes());
stream.write(str3.getBytes());
stream.write(str2.getBytes());
stream.close();
}
}
这样就可以了,但是换行符根据操作系统的不一样而不一样,Windows的是/r/n,Linux的是/n,苹果mac的是/r。
那么,第二个问题,续写,我们应该怎么解决呢,其实,在创建对象时,参数不仅仅是路径,后面还会有一个参数,是boolean类型的参数,默认的是false,我们只需要手动将ture传进去就可以了。