io流,即存储和读取数据的方案
首先,按照流的方向可以分为输入流(即inputstream)和输出流(即outputstream),按照操作文件类型可以分为,字节流和字符流,其中字符流只能操作纯文本文件,而字节流可以操作所有类型文件(通俗的来说,能用记事本打开并且读懂的文件为纯文本文件,也可以通过后缀来判断,后缀为txt或md或xml的为纯文本文件)
首先介绍输入流,方法名为FileInputStream,其中File表示作用,InputStream表示继承结构
同理,输出流为FileOutputStream,书写步骤为先创建字节输出流对象,再写数据
import java.io.*;
public class Test{
public static void main(String[] args)throws IOException{
//1.创建对象
//写出输出流OutputStream
FileOutputStream dos=new FileOutputStream("src\\a.txt");//表示先到当前项目项找myfile再找a.txt
//2.写出数据
dos.write(98);//打印的为b
dos.close();
}
}
原理:FileOutputStream dos=new FileOutputStream("src\\a.txt");这行代码相当于在程序与文件之间修了一条路,再通过write“运输”数据,最后再用close把这条路封锁了。
细节:1.在创建字节输出流对象时参数可以是字符串表达的路径或者File对象都可以
如
FileOutputStream dos=new FileOutputStream(new File("src\\b.txt"));//此时创建了一个新的文本b.txt
如果文件不存在,则会创建一个新的文件,但要保证父级路径是存在的,如上列代码中的src
如果文件已经存在,则会清空文件
2.write()中若直接输入数字,则会输出对应的ASSCII码字符,若要输入数字,可通过如下方法
dos.write("666".getBytes());//输入的为666
3.每次使用完流都要释放资源,否则java程序会一直占有文件,无法在本地操作文件
此外,FileOutputStream写数据一共有三种方式
void write(int b)//一次写一个字节数据
void write(byte[] b)//一次写一个字节数组的数据
void write(byte[] b,int off,int len)//一次写一个字节数组的部分数据
那么如何写入字符串呢?可以参照以下代码
import java.io.*;
public class Test{
public static void main(String[] args)throws IOException{
FileOutputStream dos=new FileOutputStream(new File("src\\b.txt"));
String str="tianjieniubi";
byte[] arr=str.getBytes();
dos.write(arr);
dos.close();
}
}
在写出数据时还要注意俩个小问题:换行与续写
1.换行,在写入俩个数据之间写入一个换行符即可,如下:
import java.io.*;
public class Test{
public static void main(String[] args)throws IOException{
FileOutputStream dos=new FileOutputStream(new File("src\\b.txt"));//表示先到当前项目项找myfile再找a.txt
String str="tianjieniubi";
byte[] arr=str.getBytes();
dos.write(arr);
String str1="\r\n";
byte[] arr1=str1.getBytes();
dos.write(arr1);
String str2="666";
byte[] arr2=str2.getBytes();
dos.write(arr2);
dos.close();
}
}
2.续写,如果想要续写,在创建对象时候把第二个参数改为true即可(默认为false)如下
import java.io.*;
public class Test{
public static void main(String[] args)throws IOException{
FileOutputStream dos=new FileOutputStream(new File("src\\b.txt"),true);//表示先到当前项目项找myfile再找a.txt
String str="tianjieniubi";
byte[] arr=str.getBytes();
dos.write(arr);
String str1="\r\n";
byte[] arr1=str1.getBytes();
dos.write(arr1);
String str2="666";
byte[] arr2=str2.getBytes();
dos.write(arr2);
dos.write(arr1);
dos.close();
}
}