java IO 文件流file

java IO 文件流file

OutputStream

  • 此抽象类是表示输出字节流的所有类的超类。输出流接受输出字节并将这些字节发送到某个接收器 (文件)。 * 需要定义
    OutputStream 子类的应用程序必须始终提供至少一种可写入一个输出字节的方法。 *
    FileOutputStream:文件字节输出流 * * 注意:OutputStream os = new
    FileOutputStream(“a.txt”, false); 覆盖文件之前的内容 * OutputStream os =
    new FileOutputStream(“a.txt”, true); 追加文件的内容 * *
    注意:流关闭之后就不能写入数据了 * * 面试题:flush和close的区别 *
    flush:刷空流,不关闭流 * close:既有刷空流的作用,还有关闭流的作用 *
    close其实只是一个通知的作用,告诉虚拟机,文件传输完毕你来关闭流

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Arrays;

public class Demo {

	public static void main(String[] args) throws IOException {
		//1:创建一个输出流 (创建管道)  既能创建流管道,还能创建文件
		FileOutputStream os = new FileOutputStream("a.txt", false);
		//2:往文件写数据
		  //2.1 一次写入一个字节
		  os.write(97);
		  os.write(98);
		  os.write(99);
		  os.write(100);
		  os.write(101);
		
		  //2.2 一次写入一个字节数组
		  byte[] by = {97,98,99,100,101};
		  os.write(by);
		  //2.3 一次写入一个字节数组的一部分
		  os.write(by, 1, 3);

		  //刷空流
		   os.flush();
		  //3:关闭流
		   os.close();
		   os.write(120);
		
		
	}
}

FileInputStream:文件字节输入流

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Arrays;

public class Demo {
	
	/*
	 * InputStream:字节输入流(抽象类)
	 */
	public static void main(String[] args) throws IOException {
		
		//1:创建字节输入流  
		File file = new File("工程天下.txt");
		System.out.println(file.length());
		FileInputStream fis = new FileInputStream(file);
		//FileInputStream fis = new FileInputStream("a.txt");
		//2:读数据
		  //2.1 一次读取一个字节
		//通过文件的长度,来确定读取字节的次数
		/*for(int i=1;i<=file.length();i++){
			System.out.println((char)fis.read());
		}
		*/
		//下一个数据字节;如果已到达文件末尾,则返回 -1。 
		/*int num = 0;
         while((num = fis.read())!=-1){
        	 System.out.println((char)num);
         }
		*/
		//2.2 一次读取一个字节数组
		byte[] by = new byte[1024];
		int num = 0;
		while((num = fis.read(by))!=-1){
			//读取文件的实际长度
			System.out.print(new String(by,0,num));
		}
		
		
		//3:关闭流
		fis.close();
		
		
	}

}

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

public class Demo2 {

	
	public static void main(String[] args) throws IOException {
		File file = new File("https://shsxt.shsxt.com/20185718.jpg");
		System.out.println(file.length());
		FileInputStream fis = new FileInputStream(file);
		byte[] by = new byte[1024];
		int num = 0;
		while((num = fis.read(by))!=-1){
			//读取文件的实际长度
			System.out.print(new String(by,0,num));
		}
		
		
		//3:关闭流
		fis.close();
		
	}
}

CopyFile

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class Demo {
	
	/*
	 * 需求1:将D://工程天下.txt 拷贝到当前项目下     名字为new.txt
	 * 需求2:将D://美女.jpg 拷贝到当前项目下 名字为美女1.jpg
	 * 
	 * 步骤
	 *  1:通过输入流读取D://工程天下.txt 到java程序中
	 *  2:通过输出流把工程天下.txt写到当前项目的文件中
	 * 
	 */
	
	/**
	 * 拷贝文件1  一次拷贝一个字节
	 * @param args
	 * @throws IOException 
	 */
	
	public static void copyFile1(FileInputStream fis,FileOutputStream fos) throws IOException{
		 int num = 0;
		 //读一个字节
		 int index = 0;
		 while((num = fis.read())!=-1){
			  //写一个字节
			 index++;
			 fos.write(num);
		 }
		 System.out.println(index);
		 fis.close();
		 fos.close();
		
		
	}
	
	/**
	 * 拷贝文件2  一次拷贝一个字节数组
	 * @param args
	 * @throws IOException 
	 */
	public static void copyFile2(FileInputStream fis,FileOutputStream fos) throws IOException{
		 int num = 0;
		 byte[] by = new byte[1024*1024];
		 int index = 0;
		 //读一个字节数组
		 while((num = fis.read(by))!=-1){
			 //一次写一个字节数组  写入的是文件的实际长度
			 index++;
			 fos.write(by, 0, num);
		 }
		System.out.println(index);
		 fis.close();
		 fos.close();
		
		
	}
	
	public static void main(String[] args) throws IOException {
		FileInputStream fis = new FileInputStream("D://eclipse-inst-win64.exe");
		FileOutputStream fos = new FileOutputStream("eclipse-inst-win64.exe");
		long start = System.currentTimeMillis();
		//copyFile1(fis,fos);
		copyFile2(fis,fos);
		long end = System.currentTimeMillis();
		System.out.println(end-start);
		
	}

}