目录

一、IO流的介绍

二、IO流的具体详解

(1)字节流

1:FileOutputStream

2:FileInputStream

(2)字符流

1:解码编码

 2:FileReader

3:FileWriter

三、IO流的使用

(1)文件拷贝

(2)拷贝文件夹

(3)加密和解密文件


一、IO流的介绍

IO流是用于读写文件中的数据(可以读写文件,或网络中的数据...),IO流中流的方向分为输入流(读取文件)和输出流(往文件中写入数据);操作文件类型分为字节流(操作所有类型的文件)
和字符流(操作纯文本文件),不仅仅如此,字节流的读取都是一个字节一个字节的读取,所以一般用它读取英文,字符流是一次读取多个字节,具体几个字节看是英文还是中文以及编码方式了(对于字节这些不是很理解的同学可以看一下这篇文章  :  字符集详解

二、IO流的具体详解

(1)字节流

FileInputStream:字节输入流(读取文件中的数据) FileOutputStream:字节输出流(往文件中写入数据)

1:FileOutputStream

字符输出流的使用: 1、创建对象 2、写入数据 3、释放资源(如果不释放资源的话,对于操作的文件会被Java给占用,那么你想对他做一些其它的操作就无法进行,如删除文件操作) 字符输出流的细节: 1:参数是路径或者是File对象 2:如果文件不存在则会创建一个新的文件,但是要保证父级路径存在 3:如果文件存在的话,会清空文件内容,不想清空,在创建对象时第二个参数可以写true 4:write方法的参数是整数,但实际写到文件上的是整数对应的ASCII字符 如果先要换行的话再次写出一个换行符就可以了 windows:\r\n Linux:\n Mac:\r

public class Fu{ public static void main(String[] args) throws IOException { FileOutputStream s=new FileOutputStream("D:\\java\\7.txt"); s.write(97); s.close(); } }

这里我们一般都不清楚ASCII值对应的字符,所以能不能想写什么不需要知道对应的ASCII呢(这里说的是英文,中文使用字符流)

public static void main(String[] args) throws IOException {
		FileOutputStream s=new FileOutputStream("D:\\java\\7.txt",true);
		String k="klkl";
		byte[] b=k.getBytes();
		String kk="\r\n";
        byte[] bb=kk.getBytes();
        s.write(bb);//换行
       	s.write(b);
		s.close();
		
		
	}

2:FileInputStream

输入流就是查看文件中的数据


public static void main(String[] args) throws IOException {
	  FileInputStream s=new FileInputStream("D:\\java\\7.txt");
	  int c;
	  while((c=s.read())!=-1) {
		  System.out.print((char)(c));
	  }
	  s.close();
   }


(2)字符流

1:解码编码

编码: public byte[] getBytes() 使用默认方式进行编码,使用idea默认是 用的方式是utf-8,使用eclipse默认是用 的是gbk public byte[] getbytes(String charsetName) 使用指定方式进行编码 解码: String(byte[] bytes) 使用默认方式进行解码 String(byte[] bytes,String charsetName) 使用指定方式进行解码

public static void main(String[] args) throws IOException {
		String s="as你好啊,牛牛";
		byte[] b=s.getBytes();
		System.out.println(Arrays.toString(b));
		
		String ss=new String(b);
		System.out.println(ss);
	}

 2:FileReader

1:创建对象
2:读取数据
3:释放资源
public static void main(String[] args) throws IOException {
		FileReader s=new FileReader("D:\\java\\7.txt");
		int c;
		while((c=s.read())!=-1) {
			System.out.print((char)(c));
		}
		s.close();
	}

3:FileWriter

public static void main(String[] args) throws IOException {
		FileWriter s=new FileWriter("D:\\java\\7.txt");
		s.write("你是是的呢");
		s.close();
	}

三、IO流的使用

(1)文件拷贝

核心思想就是边读边写,这个代码适合小文件。

public static void main(String[] args) throws IOException {
		FileInputStream s=new FileInputStream("D:\\java\\7.txt");
		FileOutputStream ss=new FileOutputStream("D:\\java\\8.txt");
		
		int c;
		while((c=s.read())!=-1) {
		  ss.write(c);
		}
	}

大文件可以这样写:

public static void main(String[] args) throws IOException {
		FileInputStream s=new FileInputStream("D:\\java\\7.txt");
		FileOutputStream ss=new FileOutputStream("D:\\java\\8.txt");
		int len;//每一次读取的数据的长度
		byte[] b=new byte[1024*1024*5];
		while((len=s.read(b))!=-1) {
			ss.write(b,0,len);//从0位置读取,读取len个数据
		}
		ss.close();//注意释放资源的顺序哦,先开的后关
		s.close();
	}

(2)拷贝文件夹

注意哈,这里是拷贝文件夹,不是拷贝文件,所以文件夹里的文件和文件夹也是要拷贝的哦!

public static void main(String[] args) throws IOException {
		File src=new File("D:java\\a");
		File des=new File("D:java\\bbb");
		cop(src,des);
	}
	public static void cop(File src,File des) throws IOException {
		File[] file=src.listFiles();
		
		for(File f:file) {
			if(f.isFile()) {
				//是文件
				FileInputStream fin=new FileInputStream(f);
				FileOutputStream fout=new FileOutputStream(new File(des,f.getName()));
				int len;
				byte[] b=new byte[1024];
				while((len=fin.read(b))!=-1) {
					fout.write(b,0,len);
				}
				fout.close();
				fin.close();
			}
			else {
				//是文件夹
				cop(f,new File(des,f.getName()));
			}
		}
	}

(3)加密和解密文件

加密解密,加密其实就是如果你想对一个文件加密的话,其实就是在创建一个文件(这就是加密过的文件),然后你想解密的话就是对于加密文件在创建一个文件(解密文件),将数据在传到解密文件中。

FileInputStream fin=new FileInputStream("D:java\\6.webp");
	   FileOutputStream fout=new FileOutputStream("D:java\\7.webp");
	   int b;
	   while((b=fin.read())!=-1) {
		   fout.write(b^2);
	   }
	   fout.close();
	   fin.close();