1、创建字节输出流:
FileOutputStream fileoutputStream = new FileOutputStream("指定目录,创建文件");
2、向创建的文件中插入数据:Write() 添加数据
package File_Copy;
import java.io.FileOutputStream;
/**
* 创建文件,在文件中添加东西
* Write() 添加数据
*/
public class Demo {
public static void main(String[] args) throws Exception {
//创建一个新的文件
//true的作用是在上一次输入结束的位置,继续输入
FileOutputStream fileOutputStream = new FileOutputStream("javase.txt",true);
//向文件中插入数据
byte[] fi="abcdef".getBytes();
fileOutputStream.write("\r\n".getBytes());
fileOutputStream.write(fi);
//一定要关闭资源
fileOutputStream.close();
}
}
3、创建字节输入流:(将给定路径下的文件内容输出出来)
File file = new File("需要输出的文件路径");
FileInputStream fileInputStream = new FileInputStream(file);
int c;
while ((c = fileInputStream.read()) != -1){
System.out.println((char)c);
}
//关闭流
fileInputStream.close();
4、例题:
写一个文件复制的案例:
-
需要用户手动输入要拷贝文件的路径和需要用户手动输入拷贝文件到的路径
-
判断用户输入的路径是否存在,不存在要求用户重新输入
package File_Copy;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.Scanner;
/**
* 文件复制的案例
*/
public class File_Copy_Demo {
public static void main(String[] args) throws Exception {
// 使⽤⽂件名称创建流对象
//创建的是j需要复制的文件对象
//需要复制的文件
FileInputStream fileInputStream=null;
String next=null;
FileOutputStream fileOutputStream=null;
System.out.println("请输入需要复制的文件及其目录:");
//判断输入的是否为有效路径
while (true){
Scanner scanner= new Scanner(System.in);
next = scanner.next();
File file=new File(next);
if(file.isFile()){
fileInputStream = new FileInputStream(file);
break;
}else{
System.out.println("文件不存在,请重新输入:");
}
}
//用于接收文件复制的一个对象
System.out.println("请输入需要将文件复制到的位置和文件名:");
//判断输入的路径及文件名是否和输入的一样
while (true){
Scanner scanner= new Scanner(System.in);
String next1 = scanner.next();
if(next.equals(next1)){
System.out.println("您输入的路径和文件名没有变化,请重新输入:");
}else{
fileOutputStream = new FileOutputStream(next1);
break;
}
}
//创建一个byte的数组
byte[] b = new byte[1024];
//定义一下文件长度
int a;
while ((a = fileInputStream.read(b)) != -1){
fileOutputStream.write(b,0,a);
}
System.out.println("复制成功");
//一定要关闭资源
fileInputStream.close();
fileOutputStream.close();
}
}
字节缓冲流
就是用BufferedOutputStream( new FileOutputStream)创建输出字节缓冲流
就是用BufferedInputStream( new FileInputStream)创建输入字节缓冲流
import java.io.*;
/**
四种方式实现复制视频,并记录每种方式复制视频的时间
1 :基本字节流一次读写一个字节 总共耗时:109784毫秒
2 :基本字节流一次读写一个字节数组 总共耗时:203毫秒
3:字节缓冲流一次读写一个字节 总共耗时:1531毫秒
4:字节缓冲流一次读写一个字节数组 总共耗时:78毫秒
*/
public class copy {
public static void main(String[] args) throws IOException {
//程序开始时间
long l = System.currentTimeMillis();
//运行程序
// show1();
// show2();
// show3();
show4();
//程序结束时间
long d=System.currentTimeMillis();
System.out.println("总共耗时:"+(d-l)+"毫秒");
}
//1 :基本字节流一次读写一个字节
public static void show1() throws IOException {
FileOutputStream fos= new FileOutputStream("D:\\学习作业\\File测试\\java.mp4");
FileInputStream fis=new FileInputStream("D:\\学习作业\\java后端大实训\\视频复习\\7月6日\\7月6日\\视频\\01_java4_sql介绍1_2021-07-06.mp4");
int i;
while ((i=fis.read())!=-1){
fos.write(i);
}
//关闭服务
fos.close();
fis.close();
}
//2 :基本字节流一次读写一个字节数组
public static void show2() throws IOException {
FileOutputStream fos= new FileOutputStream("D:\\学习作业\\File测试\\java2.mp4");
FileInputStream fis=new FileInputStream("D:\\学习作业\\java后端大实训\\视频复习\\7月6日\\7月6日\\视频\\01_java4_sql介绍1_2021-07-06.mp4");
byte[] b=new byte[1024];
int len;
while ((len=fis.read(b))!=-1){
fos.write(b,0,len);
}
//关闭服务
fos.close();
fis.close();
}
//3:字节缓冲流一次读写一个字节
public static void show3() throws IOException {
BufferedOutputStream bos=new BufferedOutputStream(new FileOutputStream("D:\\学习作业\\File测试\\java3.mp4"));
BufferedInputStream bis=new BufferedInputStream(new FileInputStream("D:\\学习作业\\java后端大实训\\视频复习\\7月6日\\7月6日\\视频\\01_java4_sql介绍1_2021-07-06.mp4"));
int i;
while ((i=bis.read())!=-1){
bos.write(i);
}
//关闭服务
bos.close();
bis.close();
}
//4:字节缓冲流一次读写一个字节数组
public static void show4() throws IOException {
BufferedOutputStream bos=new BufferedOutputStream(new FileOutputStream("D:\\学习作业\\File测试\\java4.mp4"));
BufferedInputStream bis=new BufferedInputStream(new FileInputStream("D:\\学习作业\\java后端大实训\\视频复习\\7月6日\\7月6日\\视频\\01_java4_sql介绍1_2021-07-06.mp4"));
byte[] b=new byte[1024];
int len;
while ((len=bis.read(b))!=-1){
bos.write(b,0,len);
}
//关闭服务
bos.close();
bis.close();
}
}
字符流
和字节流的使用方法一样
1、创建输入字符流
public class FileReaderConstructor throws IOException{
public static void main(String[] args) {
// 使⽤File对象创建流对象
File file = new File("a.txt");
FileReader fr = new FileReader(file);
// 使⽤⽂件名称创建流对象
FileReader fr = new FileReader("b.txt");
}
}
例题:把集合中的数据插入到文件中
import java.io.*;
import java.util.ArrayList;
/**
* 将集合中的数据,插入到文件中;
*/
public class java_dd {
public static void main(String[] args) throws IOException {
//创建一个ArrayList的集合
ArrayList<String> array=new ArrayList<String>();
array.add("java");
array.add("java1");
array.add("java2");
array.add("java3");
array.add("java4");
//创建一个字符缓冲输出流
BufferedWriter bw = new BufferedWriter(new FileWriter("jj.txt",true));
//遍历集合得到集合数据,插入到文件中
for(String a:array){
System.out.println(a);
bw.write(a);
bw.newLine();
bw.flush();
}
//关闭数据流
bw.close();
}
}
例题:把文件中的数据插入到集合中
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
public class java_dd_demo {
public static void main(String[] args) throws IOException {
//创建字符缓冲输入流对象
BufferedReader br=new BufferedReader(new FileReader("jj.txt"));
//创建一个ArrayList的集合
ArrayList<String> array=new ArrayList<String>();
//读取文件中的数据
String line;
while ((line = br.readLine())!=null){
//将读取到的数据插入到集合中
array.add(line);
}
//关闭服务
br.close();
//遍历集合显示出来
for(String a : array){
System.out.println(a);
}
}
}