1、文件的复制(速度快)2、向文件中写出字符串3、从文件中读取字符串:4、实现简易记事本工具:5、文件输出流的追加写模式:6、缓冲流(BufferedOutputStream):
——————————————————————————————————————
——————————————————————————————————————
0、节点流(字节流和字符流)
①字节流:字节
②字符流:
①简单点:字节->解码->字符。 ②复杂点:若干字节->选择某种解码方式->解码->索引字符集->映射到一个字符。
————————————————
字符流的概念,它是按虚拟机的编码来处理,也就是要进行字符集的转化,这两个之间通过InputStreamReader,OutputStreamWriter(转换流)来关联,实际上是通过 byte[]和 String来关联的。
package Vdayio;
import java.io.*;
public class VIdayCopyDemo02 {
public static void main(String[] args) throws IOException {
FileInputStream fis = new FileInputStream("9.ppt");
FileOutputStream fos = new FileOutputStream("9_cp2.ppt");
//定义一个可以存储10240字节的数组,相当于缓存:
byte[] data = new byte[1024*10];//10kb
//得到实际读取到的字节数:
int len;
//该方法的作用是返回当前的计算机时间:
long start = System.currentTimeMillis();
while ((len = fis.read(data))!= -1) { //read(要传参):用块读 ;若写成=-1,则会产生几十个G的垃圾文件
//fos.write(data);//复制的文件会产生多余的垃圾数据
fos.write(data,0,len);//不会产生垃圾数据 ,将文件上的字节读取到内存data中
}
long end = System.currentTimeMillis();
System.out.println("复制完毕!耗时:" + (end - start) + "ma");
fis.close();
fos.close();//流在使用完毕后要调用close关闭
}
}
2、向文件中写出字符串:
--------------------FileOutputStream fos = new FileOutputStream(“demo.txt”);
package Vdayio;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
public class WriteStringDemo {
public static void main(String[] args) throws IOException {
//向文件demo.txt中写入文本数据:
FileOutputStream fos = new FileOutputStream("demo.txt");
String line = "beep,beep,i'm sheep~beep,beep,i'm sheep~";//line:行
byte[] data = line.getBytes(StandardCharsets.UTF_8);//用UTF-8把字符串转化为字节存在byte[]数组里
fos.write(data);//写出要存的数据
//将最上面三句话精简:(用UTF-8把字符串转化为字节存在byte[]数组里)
fos.write("比,bi,爱慕希~比,比,爱慕希".getBytes(StandardCharsets.UTF_8));
System.out.println("写出完毕!");//此时会在默认路径项目名下的文件夹里创建"demo.txt"文件并写入语句。
fos.close();//流在使用完毕后要调用close关闭
}
}
3、从文件中读取字符串:
package Vdayio;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
public class VIdayReadStringDemo {
public static void main(String[] args) throws IOException {
FileInputStream fis = new FileInputStream("demo.txt");//向文件demo.txt中写入文本数据
//利用available表示文件的长度。注:该方法实际是预估目前能通过输入流读取到多少
//字节,不能记为流只能读取到这么多就再也读不到数据了!:
byte[] data = new byte[fis.available()];//创建一个byte[]数组用来装demo.txt的数据
//一次性读取文件中的所有字节到数组中(原因是字节数组长度与文件长度正好一致)
fis.read(data);//读数据
//把所有的数据用UTF-8把字符串转换为字节存储在定义的str里:
//String的构造方法支持将给定的字节数组按照指定的字符集还原为字符串:
String str = new String(data, StandardCharsets.UTF_8);
System.out.println(str);
fis.close();//流在使用完毕后要调用close关闭
}
}
4、实现简易记事本工具:
package Vdayio;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.Scanner;
public class VIdayTest2 {
public static void main(String[] args) throws IOException {
Scanner scanner = new Scanner(System.in);//创建扫描仪,用来获取用户输入
System.out.println("请开始输入内容,单独输入exit退出");
FileOutputStream fos = new FileOutputStream("note.txt");//向文件note.txt中写入文本数据
//如下和上面(1)相同:
String line;//定义一个字符串line
while(!"exit".equals(line = scanner.nextLine())){
fos.write(line.getBytes(StandardCharsets.UTF_8));//用UTF-8把字符串转化为字节存在byte[]数组里
}
fos.close();//流在使用完毕后要调用close关闭
}
}
5、文件输出流的追加写模式:
//不加true----下面的字符串则会把之前的覆盖
//加上true----会在之前字符串的基础追加下面输入的字符串
package Vdayio;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
public class VIdayFosDemo {
public static void main(String[] args) throws IOException {
//加上true----会在之前字符串的基础追加下面输入的字符串:
//不加true----下面的字符串则会把之前的覆盖:
FileOutputStream fos = new FileOutputStream("fos.txt",true);
String line = "你叉叉,穷哈哈~哈利波特骑着扫帚飞,sorry~";
fos.write(line.getBytes(StandardCharsets.UTF_8));//用UTF-8把字符串转化为字节存在byte[]数组里
System.out.println("输出完毕!");
fos.close();//流在使用完毕后要调用close关闭
}
}
6、缓冲流(BufferedOutputStream):
是一种高级流,作用是加快读写效率更高
package Vdayio;
import java.io.*;
public class VIdayCopyDemo03 {
public static void main(String[] args) throws IOException {
FileInputStream fis = new FileInputStream("9.ppt");//向文件9.ppt中写入文本数据
BufferedInputStream bis = new BufferedInputStream(fis);//创建缓冲输入流的同时连在fis上
FileOutputStream fos = new FileOutputStream("9_cp.ppt");
BufferedOutputStream bos = new BufferedOutputStream(fos);//创建缓冲输入流的同时连在fos上
int d;
long start = System.currentTimeMillis();
while((d = bis.read())!=-1){ //使用缓冲流读取字节 //有了缓冲流,就不需要用fis输出流了
bos.write(d);//使用缓冲流写出字节
}
long end = System.currentTimeMillis();//到结束使用了多长时间
System.out.println("耗时:"+(end-start)+"ms");
bis.close();//关闭流时只需要关闭高级流即可,他会自动关闭他连接的流
bos.close();//(流在使用完毕后要调用close关闭)
}
}



