2022年0704-Com.Java.Basis 第十四课 《File类 +IO流》简称字节的Ctrl+A Ctrl+C Ctrl+V.这篇文章我无法创造出经典:但是我可以编写出自己经典的文章。十六个小案例带你走进Java的IO流
第一部分:基础知识的积累:
1 初识Java IO IO,即in和out,也就是输入和输出,指应用程序和外部设备之间的数据传递,常见的外部设备包括文件、管道、网络连接。
Java 中是通过流处理IO 的,那么什么是流?
流(Stream),是一个抽象的概念,是指一连串的数据(字符或字节),是以先进先出的方式发送信息的通道。
当程序需要读取数据的时候,就会开启一个通向数据源的流,这个数据源可以是文件,内存,或是网络连接。类似的,当程序需要写入数据的时候,就会开启一个通向目的地的流。这时候你就可以想象数据好像在这其中“流”动一样。
一般来说关于流的特性有下面几点:
先进先出:最先写入输出流的数据最先被输入流读取到。 顺序存取:可以一个接一个地往流中写入一串字节,读出时也将按写入顺序读取一串字节,不能随机访问中间的数据。(RandomAccessFile除外) 只读或只写:每个流只能是输入流或输出流的一种,不能同时具备两个功能,输入流只能进行读操作,对输出流只能进行写操作。在一个数据传输通道中,如果既要写入数据,又要读取数据,则要分别提供两个流。
总结:以自己为中心看流是流入还是流出
2 IO流分类 IO流主要的分类方式有以下3种: 按数据流的方向:输入流、输出流 按处理数据单位:字节流、字符流 按功能:节点流、处理流
3 IO流方法 3.1 字节流方法 字节输入流InputStream主要方法:
read() :从此输入流中读取一个数据字节。 read(byte[] b) :从此输入流中将最多 b.length 个字节的数据读入一个 byte 数组中。 read(byte[] b, int off, int len) :从此输入流中将最多 len 个字节的数据读入一个 byte 数组中。 close():关闭此输入流并释放与该流关联的所有系统资源。 字节输出流OutputStream主要方法:
write(byte[] b) :将 b.length 个字节从指定 byte 数组写入此文件输出流中。 write(byte[] b, int off, int len) :将指定 byte 数组中从偏移量 off 开始的 len 个字节写入此文件输出流。 write(int b) :将指定字节写入此文件输出流。 close() :关闭此输入流并释放与该流关联的所有系统资源。 3.2 字符流方法 字符输入流Reader主要方法:
read():读取单个字符。 read(char[] cbuf) :将字符读入数组。 read(char[] cbuf, int off, int len) : 将字符读入数组的某一部分。 read(CharBuffer target) :试图将字符读入指定的字符缓冲区。 flush() :刷新该流的缓冲。 close() :关闭此流,但要先刷新它。 字符输出流Writer主要方法:
write(char[] cbuf) :写入字符数组。 write(char[] cbuf, int off, int len) :写入字符数组的某一部分。 write(int c) :写入单个字符。 write(String str) :写入字符串。 write(String str, int off, int len) :写入字符串的某一部分。 flush() :刷新该流的缓冲。 close() :关闭此流,但要先刷新它。 另外,字符缓冲流还有两个独特的方法:
BufferedWriter类newLine() :写入一个行分隔符。这个方法会自动适配所在系统的行分隔符。 BufferedReader类readLine() :读取一个文本行。 4 加点扩展的内容 4.1 位、字节、字符 字节(Byte)是计量单位,表示数据量多少,是计算机信息技术用于计量存储容量的一种计量单位,通常情况下一字节等于八位。
字符(Character)计算机中使用的字母、数字、字和符号,比如’A’、‘B’、’$’、’&'等。
一般在英文状态下一个字母或字符占用一个字节,一个汉字用两个字节表示。
字节与字符:
ASCII 码中,一个英文字母(不分大小写)为一个字节,一个中文汉字为两个字节。 UTF-8 编码中,一个英文字为一个字节,一个中文为三个字节。 Unicode 编码中,一个英文为一个字节,一个中文为两个字节。 符号:英文标点为一个字节,中文标点为两个字节。例如:英文句号 . 占1个字节的大小,中文句号 。占2个字节的大小。 UTF-16 编码中,一个英文字母字符或一个汉字字符存储都需要 2 个字节(Unicode 扩展区的一些汉字存储需要 4 个字节)。 UTF-32 编码中,世界上任何字符的存储都需要 4 个字节。
第二部分:进入主题IO流: 十六个小案例带你走进Java的IO流
案例Demo展示的内容
案例一
概述:文件和目录(文件夹)路径名的抽象表示形式
路径的分类:
绝对路径:带有盘符号的路径
相对路径:没有带盘符号的路径,默认在根目录下
构造方法
File(String pathname):根据一个路径得到File对象
File(String parent, String child):根据一个目录和一个子文件/目录得到File对象
File(File parent, String child):根据一个父File对象和子文件/目录得到File对象 判断功能
public boolean isDirectory(): 判断是否是目录
public boolean isFile(): 判断是否是文件
public boolean exists(): 判断是否存在
public boolean canRead(): 判断是否可读
public boolean canWrite(): 判断是否可写
public boolean isHidden(): 判断是否隐藏 获取功能
public String getAbsolutePath(): 获取绝对路径
public String getPath(): 获取相对路径
public String getParent() 获取上一级路径,返回字符串,没有返回null
public File getParentFile() 获取上一级路径,返回File类型,没有返回nul
public long getTotalSpace() 返回总容量 单位字节
public long getFreeSpace() 返回剩余容量 单位字节
public String getName(): 获取名称
public long length(): 获取长度。字节数
public long lastModified(): 获取最后一次的修改时间,毫秒值
package com.JavaBasicsDemo9;
public static void main (String[] args) throws Exception {
File file = new File ("E:\\demo\\nopainsnogains.ppt" );
System.out.println(file);
System.out.println(file.isDirectory());
System.out.println(file.isFile());
System.out.println(file.exists());
System.out.println(file.canRead());
System.out.println(file.canWrite());
System.out.println(file.isHidden());
System.out.println(file.getAbsolutePath());
System.out.println(file.getPath());
System.out.println(file.getParent());
System.out.println(file.getParentFile());
System.out.println(file.getCanonicalPath());
System.out.println("返回总容量 单位字节" + file.getTotalSpace());
System.out.println("返回剩余容量 单位字节" + file.getFreeSpace());
System.out.println(file.getName());
System.out.println(file.length());
System.out.println(file.lastModified());
File file2 = new File ("E:\\demo\\aa\\ba\\ca\\da\\ea\\fa\\ga" );
File f = new File ("E:\\demo\\HelloWord.text" );
System.out.println(f.isDirectory());
System.out.println(f.isFile());
案例二:
package com.JavaBasicsDemo9;
import java.io.FileOutputStream;
import java.io.IOException;
public class Demo1Test2 {
public static void main (String[] args) {
FileOutputStream fos=null ;
fos =new FileOutputStream ("E:\\demo\\File.txt" ,true );
for (int i = 0 ; i <=5 ; i++) {
System.out.println("ctrl+c ctrl+v" );
fos.write("窗前明月光意识地上床酒托人生能坎区因" .getBytes());
fos.write("\r\n" .getBytes());
} catch (IOException e) {
案例三:
package com.JavaBasicsDemo9;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class Demo1Test3 {
public static void main (String[] args) throws IOException {
FileInputStream fis=new FileInputStream ("E:\\demo\\File.txt" );
FileOutputStream fos = new FileOutputStream ("E:\\demo\\ctrlV.txt" ,true );
while ((by=fis.read())!=-1 ) {
Java程序员的ctrl+A ctrl+c ctrl+v
案例四:
package com.JavaBasicsDemo9;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class Demo1Test4 {
public static void main (String[] args) throws IOException {
FileInputStream fis=new FileInputStream ("E:\\demo\\AAA.txt" );
FileOutputStream fos = new FileOutputStream ("E:\\demo\\BBB.txt" ,true );
while ((by=fis.read())!=-1 ) {
案例五:
package com.JavaBasicsDemo9;
public class Demo1Test5 {
public static void main (String[] args) throws Exception{
File file = new File ("E:\\demo\\AAA.text" );
System.out.println(file);
System.out.println(file.isDirectory());
System.out.println(file.isFile());
System.out.println(file.exists());
System.out.println(file.getAbsolutePath());
System.out.println(file.getName());
System.out.println(file.getPath());
System.out.println(file.getCanonicalFile());
File file2 = new File ("E:\\demo\\aa\\ba\\ca\\da\\ea\\fa\\ga" );
File f = new File ("E:\\demo\\hellow.text" );
System.out.println(f.isDirectory());
System.out.println(f.isFile());
File file =new File ("E:\\demo\\AAA.text"); 创建文件的方式
案例六:
package com.JavaBasicsDemo9;
import java.io.FileOutputStream;
import java.io.IOException;
public class Demo1Test6 {
public static void main (String[] args) {
FileOutputStream fos=null ;
fos =new FileOutputStream ("E:\\demo\\AAA.txt" ,true );
for (int i = 0 ; i <=10 ; i++) {
fos.write("我是转入的数据ctrl " .getBytes());
fos.write("\r\n" .getBytes());
} catch (IOException e) {
案例七:
package com.JavaBasicsDemo9;
public class Demo1Test7 {
public static void main (String[] args) throws Exception{
File file = new File ("E:\\demo\\heerllo.text" );
System.out.println(file);
File file1 = new File ("E:\\demo\\hello" );
File file22 = new File ("E:\\dem\\hert" );
File file2 = new File ("E:\\demo\\a\\b\\c" );
File f = new File ("E:\\demo\\heerllowert.text" );
System.out.println(f.isDirectory());
System.out.println(f.isFile());
案例八:
package com.JavaBasicsDemo9;
public class Demo1Test8 {
public static void main (String[] args) {
File file = new File ("E:\\demo\\hello" );
File file1 = new File ("E:\\demo\\hello" );
File file2 = new File ("E:\\demo\\a\\b\\c\\d\\e\\f" );
案例九:
package com.JavaBasicsDemo9;
import java.io.FileInputStream;
import java.io.IOException;
public class Demo1Test9 {
public static void main (String[] args) throws IOException {
FileInputStream fis=new FileInputStream ("E:\\demo\\haha.txt" );
System.out.println(num1);
System.out.println(num2);
System.out.println(num3);
案例十:
package com.JavaBasicsDemo9;
import java.io.FileInputStream;
import java.io.IOException;
public class Demo1Test10 {
public static void main (String[] args) throws IOException {
FileInputStream fis=new FileInputStream ("E:\\demo\\haha.txt" );
while ((by=fis.read())!=-1 ) {
System.out.print((char )by);
案例十一:
package com.JavaBasicsDemo9;
import java.io.FileOutputStream;
import java.io.IOException;
public class Demo1Test11 {
public static void main (String[] args) throws IOException {
FileOutputStream fos = new FileOutputStream ("E:\\demo\\herrllo.text" ,true );
byte [] by1=str.getBytes();
案例十二:
package com.JavaBasicsDemo9;
import java.io.FileOutputStream;
import java.io.IOException;
public class Demo1Test12 {
public static void main (String[] args) {
FileOutputStream fos=null ;
fos =new FileOutputStream ("E:\\demo\\haha.txt" ,true );
for (int i = 0 ; i <=10 ; i++) {
fos.write("I love you in the end " .getBytes());
fos.write("\r\n" .getBytes());
} catch (IOException e) {
案例十三:
package com.JavaBasicsDemo9;
public class BufferStreamDemo1 {
public static void main (String[] args) throws IOException {
long startTime1 = System.currentTimeMillis();
long endTime1 = System.currentTimeMillis();
System.out.println("方法1:" +(endTime1-startTime1));
long startTime2 = System.currentTimeMillis();
long endTime2 = System.currentTimeMillis();
System.out.println("方法2:" +(endTime2-startTime2));
long startTime3 = System.currentTimeMillis();
long endTime3 = System.currentTimeMillis();
System.out.println("方法3:" +(endTime3-startTime3));
long startTime4 = System.currentTimeMillis();
long endTime4 = System.currentTimeMillis();
System.out.println("方法4:" +(endTime4-startTime4));
public static void method1 () throws IOException {
FileInputStream fis= new FileInputStream ("C:\\Users\\MZFAITHDREAM\\Pictures\\Saved Pictures\\A-1 (4)\\黑白上色\\01.jpg" );
FileOutputStream fos = new FileOutputStream ("D:\\01.jpg" ,true );
byte [] by =new byte [1024 ];
while ((num=fis.read(by))!=-1 ) {
public static void method2 () throws IOException {
FileInputStream fis= new FileInputStream ("C:\\Users\\MZFAITHDREAM\\Desktop\\1.jpg" );
FileOutputStream fos = new FileOutputStream ("D:\\method2.jpg" ,true );
byte [] by =new byte [1024 ];
while ((num=fis.read(by))!=-1 ) {
public static void method3 () throws IOException {
FileInputStream fis= new FileInputStream ("C:\\Users\\MZFAITHDREAM\\Desktop\\1.jpg" );
BufferedInputStream bis = new BufferedInputStream (fis);
FileOutputStream fos = new FileOutputStream ("D:\\method3.jpg" ,true );
BufferedOutputStream bos = new BufferedOutputStream (fos);
while ((num=fis.read())!=-1 ) {
public static void method4 () throws IOException {
FileInputStream fis= new FileInputStream ("C:\\Users\\MZFAITHDREAM\\Desktop\\1.jpg" );
BufferedInputStream bis = new BufferedInputStream (fis);
FileOutputStream fos = new FileOutputStream ("D:\\method4.jpg" ,true );
BufferedOutputStream bos = new BufferedOutputStream (fos);
byte [] by=new byte [1024 ];
while ((num=fis.read())!=-1 ) {
案例十四:
package com.JavaBasicsDemo9;
public static void main (String[] args) throws Exception {
String str="我爱距离100km江西南字符昌学lookforyou江西区的学院" ;
byte [] by =str.getBytes("utf-8" );
String str1 = new String (by,"utf-8" );
System.out.println(str1);
String str2="我爱距离100km江西南区的学院" ;
byte [] by1 =str1.getBytes("gbk" );
String str3 = new String (by,"gbk" );
System.out.println(str2);
System.out.println(str.getBytes());
System.out.println(str2);
案例十五:
package com.JavaBasicsDemo9;
public static void main (String[] args) throws IOException {
FileInputStream fis= new FileInputStream ("C:\\Users\\MZFAITHDREAM\\Desktop\\Javaday1_9.zip" );
FileOutputStream fos = new FileOutputStream ("D:\\Day" );
InputStreamReader isr=new InputStreamReader (fis,"utf-8" );
OutputStreamWriter osr=new OutputStreamWriter (fos,"utf-8" );
char [] cr=new char [1024 ];
while ((num=isr.read(cr))!=-1 ) {
案例十六:
package com.JavaBasicsDemo9;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public static void main (String[] args) throws IOException {
FileInputStream fis= new FileInputStream ("C:\\Users\\MZFAITHDREAM\\Desktop\\1.jpg" );
FileOutputStream fos = new FileOutputStream ("D:\\胡滨.jpg" ,true );
byte [] by =new byte [1024 ];
while ((num=fis.read(by))!=-1 ) {
十六个小案例带你走进java的IO流