从硬盘到内存的读取过程称为IO流;
按数据流向:
输入流:读取数据;内存从硬盘中读取数据
输出流:写数据;将内存中的数据写入硬盘
按数据类型:(较常用)
字节流:字节输入输出流
字符流:字符输入输出流
字节流的使用范围大于字符流,通常用字符流;
字节流写数据:
inputstream类-----字节输入 抽象类,是所有字节输入流的超类
outputstream类------字节输出 抽象类,是所有字节输出流的超类
fileoutputstream extends outputstream 将数据写入文件
fileoutputstream(Sting name);创建文件输出流以指定的名称写入文件;
字节流写数据的三种方式:
write(int or char b)将指定的字节写入此文件输出流,一次只能写一个字节
write(byte[] b) 将b.length字节从指定的字节数组写入此文件输出流,一次写一个字节数组数据
write(byte[] ,int off,int len)将len字节从指定字节数组开始,从偏移量off开始写入此文件输出流,一次写一个字节数组的部分数据
public class fileoutput {
public static void main(String[] args) throws IOException {
FileOutputStream fos = new FileOutputStream("java1.txt");
fos.write('a');//这种方法只能写入字符,不能是字符串,且写入数字时会当成字符编码写入字符
byte[] bys = {'1',97,'b',54}; //getbytes)方法可以将一个字符串转换成一个字节数组
byte[] bys1 = "abcde".getBytes();
fos.write(bys1);//一次写一个字节数组
byte[] bys3 ="abcde".getBytes();
fos.write(bys3,1,3);//一次写一个字节数组的一部分,写入bcd
//off编号从0 开始,len表示需要写入的长度;
fos.close();//写入后关闭输出流且释放了与此输出流相关的资源
}
}
对于换行符,不同系统识别的字符不一样
windows :\r\n 记事本这个才能认为是换行符
linux : \n
mac : \r
追加写入:
FileOutputStream fos = new FileOutputStream("java1.txt",true);
表示追加写入,true参数认为是追加写,如果不加这个参数,认为是从开头写
可以异常处理的字节流写数据
package filestream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
public class fileoutput {
public static void main(String[] args) throws IOException {
FileOutputStream fos = null; //最外部定义,finally才能识别
try {
fos = new FileOutputStream("java1.txt", true);
fos.write('a');//这种方法只能写入字符,不能是字符串,且写入数字时会当成字符编码写入字符
byte[] bys = {'1', 97, 'b', 54}; //getbytes)方法可以将一个字符串转换成一个字节数组
byte[] bys1 = "abcde".getBytes();
fos.write(bys1);//一次写一个字节数组
byte[] bys3 = "abcde".getBytes();
fos.write(bys3, 1, 3);//一次写一个字节数组的一部分,写入bcd
//off编号从0 开始,len表示需要写入的长度;
}
catch(IOException e){
e.printStackTrace();
}
finally {
try{
assert fos != null;
fos.close();}//写入后关闭输出流且释放了与此输出流相关的资源
catch (IOException e){e.printStackTrace();}
}
}
}