字符输出流
//1.创建 字符输出流 FileWriter写
FileWriter fw=new FileWriter("D:\\java\\javacto\\aa.txt",true);
//2.写 字节流使用的方法 字符流就可以使用
fw.write(97);
fw.write(98);
//3.换行再写
fw.write("\r");
fw.write("直接写文字");
//4.释放资源
fw.close();
运行截图(注:第一行为之前的记录)
//1.创建字符输出流 FileWriter写
FileWriter fw=new FileWriter("D:\\java\\javacto\\aa.txt");
//2.将字符串 转为 char类型
char[] c="好好学java".toCharArray();
//3.只将其中一部分写入
fw.write(c,2,2);
//4.释放资源
fw.close();
运行截图:
//1.创建 字符输出流 FileWriter写
FileWriter fw=new FileWriter("D:\\java\\javacto\\aa.txt");
//2.定义数组
String strs[]={"我","跟","老","师","学","Java"};
//3.循环遍历
for(String s:strs){
fw.write(s);
//fw.write("\r");
}
//4.释放资源
fw.close();
运行截图:
异常处理
示例代码
public class Test002 {
public static void main(String[] args) throws IOException {
test001();
}
private static void test001() throws IOException {
FileWriter fw=null;
try{
int i=1/0;
//1.创建 字符输出流 FileWriter写
fw=new FileWriter("D:\\java\\javacto\\aa.txt");
//2.定义数组
String strs[]={"我","跟","老","师","学","Java"};
//3.循环遍历
for(String s:strs){
fw.write(s);
//fw.write("\r");
}
}catch(IOException e){
e.printStackTrace();
}finally {
try{
if(fw!=null){
//4.释放资源
fw.close();
}
}catch (IOException e){
e.printStackTrace();
}
}
}
}
缓冲流
对4个基本FIleXXX的增强,按照数据类型分类:
字节缓冲流:BufferedInputStream、BufferedOuputStream
字符缓冲流:BufferedReader、BufferedWriter
//1.创建字节缓冲输入流
FileInputStream fis=new FileInputStream("D:\\java\\javacto\\aa.txt");
BufferedInputStream bis=new BufferedInputStream(fis);
//2.创建字节缓冲输出流
BufferedOutputStream bos=new BufferedOutputStream(new FileOutputStream("D:\\java\\javacto\\aa.txt"));
字节流复制文件耗时
//记录开始时间
long start=System.currentTimeMillis();//获取当前系统时间
//1.1创建字节输入流
FileInputStream fis=new FileInputStream("D:\\毕业设计\\DataSet.rar");
//1.2创建字节输出流
FileOutputStream fos=new FileOutputStream("D:\\java\\javacto\\CopySet.rar");
//2.定义数组 每次读多少个字节
byte[] b=new byte[1024];
int len;
//3.循环读取
while ((len=fis.read(b))!=-1){
//4.写
fos.write(b,0,len);
}
//5.释放资源
fos.close();
fis.close();
//记录结束时间
long end=System.currentTimeMillis();//获取当前系统时间
System.out.println("总共耗时"+(end-start)+"毫秒");
结果截图
字节缓冲流复制文件耗时时间对比
使用字节流复制同一文件
//1.记录开始时间
long start=System.currentTimeMillis();//获取当前系统时间
//1.1创建字节缓冲输入流 读
BufferedInputStream bis=new BufferedInputStream(new FileInputStream("D:\\毕业设计\\DataSet.rar"));
//1.2创建字节缓冲输出流 写
BufferedOutputStream bos=new BufferedOutputStream(new FileOutputStream("D:\\java\\javacto\\CopySet.rar"));
//2.定义数组 每次读多少个字节
byte[] b=new byte[1024];
int len;
//3.循环读取
while ((len=bis.read(b))!=-1){
//4.写
bos.write(b,0,len);
}
//记录结束时间
long end=System.currentTimeMillis();//获取当前系统时间
System.out.println("总共耗时"+(end-start)+"毫秒");
运行截图:
字符缓冲流
特有方法:一次读一行 readLine()方法
使用
//创建 字符缓冲流输入流 读
FileReader fr=new FileReader("D:\\java\\javacto\\aa.txt");
BufferedReader br=new BufferedReader(fr);
//创建字符缓冲输出流 写
BufferedWriter bw=new BufferedWriter(new FileWriter("D:\\java\\javacto\\aa.txt"));
使用readLine()方法读
//1.创建字符缓冲输入流 读
BufferedReader br=new BufferedReader(new FileReader("D:\\java\\javacto\\aa.txt"));
//2.一行一行读 读到最后没有就返回null
System.out.println(br.readLine());
System.out.println(br.readLine());
System.out.println(br.readLine());
//3.关闭资源
br.close();
运行截图:
循环遍历方式读
//1.创建字符缓冲输入流 读
BufferedReader br=new BufferedReader(new FileReader("D:\\java\\javacto\\aa.txt"));
//2.定义一个字符串
String lineStr=null;
//3.循环遍历
while ((lineStr=br.readLine())!=null){
System.out.println(lineStr);
}
//3.关闭资源
br.close();
运行截图同上
向文件中写内容
//1.创建字符缓冲输出流 写
BufferedWriter bw=new BufferedWriter(new FileWriter("D:\\java\\javacto\\aa.txt"));
//2.写
bw.write("我要学java");
//换行
bw.newLine();
bw.write("跟老师学就可以了");
//3.释放资源
bw.close();
运行截图
转换流
读取非UTF-8格式的文件
//文件格式为ANSI
FileReader fw=new FileReader("D:\\java\\javacto\\tt.txt");
int read;
while ((read=fw.read())!=-1){
System.out.println((char) read);
}
运行截图
读取文件(使用转换输入流InputStreamReader)
//1.转换输入流 因为存的是GBK 读的时候也是GBK
InputStreamReader isr=new InputStreamReader(new FileInputStream("D:\\java\\javacto\\tt.txt"),"GBK");
//2.定义数组 每次读多个文字
char[] c=new char[10];
int len;
//3.循环遍历
while ((len=isr.read(c))!=-1){
System.out.print(new String(c,0,len));
}
//4.释放资源
isr.close();
运行截图
向文件中写内容(可以指定格式)
//写的时候可以指定编码格式
FileOutputStream fos=new FileOutputStream("D:\\java\\javacto\\tt.txt");
OutputStreamWriter oos=new OutputStreamWriter(fos,"UTF-8");
//写
oos.write("跟之前一摸一样,之前怎么写,现在就怎么写");
//释放资源
oos.close();
运行截图