Java之IO流概述和File基本操作

时间:2022-04-29
本文章向大家介绍Java之IO流概述和File基本操作,主要内容包括IO流图解、IO(in / out)流的分类、File类基本操作、I/O 流基本操作、基本概念、基础应用、原理机制和需要注意的事项等,并结合实例形式分析了其使用技巧,希望通过本文能帮助到大家理解应用这部分内容。

IO流图解

IO(in / out)流的分类

流向:

    输入流  读取数据

    输出流  写出数据

数据类型:

    字节流

    一个字节占8位, 以一个字节为单位读数据  

    八大数据类型所占字节数:     byte(1), short(2), int(4), long(8),float(4), double(8),boolean(1),char(2)

      字节输入流  读取数据  InputStream

      字节输出流  写出数据  OutputStream

    字符流

    一个字符占两个字节, 以一个字符为一个单位

      字符输入流  读取数据  Reader

      字符输出流  写出数据  Writer

字节流的基本抽象类

 InputStream    OutputStream

字符流的基本抽象类

Reader   Writer

功能:     节点流: 只有一个根管道套在文件上进行传输     处理流: 将节点流处理一下, 增强管道的功能, 相当于在管道上套一层

File类基本操作

 1         File file=new File("D:\0603\03.txt");
 2         File file2=new File("D:\06\03\01");
 3         File file3=new File("D:\0603\06.txt");
 4         System.out.println(file.exists());//判断文件是否存在,返回Boolean值
 5         System.out.println(file.mkdir());//创建文件夹,只能创建一层,返回Boolean值
 6         System.out.println(file2.mkdirs());//创建文件夹,创建多层,返回Boolean值
 7         System.out.println(file3.createNewFile());//创建新文件,此处需处理异常,返回Boolean值
 8         System.out.println(file3.delete());//删除文件,返回Boolean值
 9         File file4=new File("D:\0603\03_new.txt");
10         System.out.println(file.renameTo(file4));//文件改名,传入另一个文件
11         System.out.println(file.getName());//返回名
12         System.out.println(file.getPath());//返回文件路径
13         System.out.println(file.isDirectory());//返回是否文件夹
14         System.out.println(file.isFile());//返回是否文件
15         System.out.println(file.length());//返回文件长度
16         File[] files=f.listFiles(); //获取路径下的文件名

查找并输出文件夹下文件夹及文件名:

 1 package com.hanqi.maya.util;
 2 
 3 import java.io.File;
 4 import java.io.FileInputStream;
 5 import java.io.FileNotFoundException;
 6 import java.io.IOException;
 7 import java.io.InputStream;
 8 
 9 public class TestFile {
10     public static void main(String[] args) {
11         File file=new File("D:\");
12         filesum(file,1);
13     }
14     public static void filesum(File f,int len){
15         if(f.exists()){//判断路径是否存在
16             File[] files=f.listFiles(); //获取路径下的文件名
17             for(File fi:files){ //循环输出文件名
18                 if(fi.isDirectory()){  //判断是否文件夹
19                     printBlank(len);  
20                     System.out.println(fi.getName());
21                     filesum(fi,len+1);  //继续调用自身
22                 }else{
23                     printBlank(len);  //输出空格
24                     System.out.println(fi.getName());    //获取当前文件夹名
25                 }
26             }
27         }else{
28             System.out.println("文件不存在!!!");
29         }
30     }
31     public static void printBlank(int len){
32         for (int i = 0; i < len; i++) {//输出. 以区分文件夹层次
33             System.out.print(". ");
34         }
35     }
36 }

 I/O 流基本操作

InputStream的基本方法:   int read(): 每次调用这个方法, 就读取一个字节, 以整数的形式返回,可以用 char 强转成字符   int read(byte[] buffer---缓冲区): 让流每次读满一个缓冲区, 再统一处理, 先存在缓冲区里, 返回值int是返回实际当中读取了多少字节数(伤硬盘的原理)   int read(byte[] buffer, int offset, int length): 也是一个缓冲区, 读取length长度的字节数, 存到buffer的缓冲区里, 从buffer的offset位置开始存, 返回值是实际读了多少字节数   close(): 关闭资源

OutputStream的基本方法:   void write(int b)   void write(byte[] b)   int wirte(byte[] buffer, int offset, int length)   close()   flush(): 将缓冲区中的文件全部写出   在使用流的时候:先flush, 再close Reader的基本方法:   int read()   int read(char[] c)   int read(char[] c, int offset, int length)   close()

Writer的基本方法:   void write()   void write(char[] c)   void write(char[] c, int offset, int length)   // 直接写一个字符串出去, 字符串里面的有一个方法s.toCharArray(), 查API   void write(String s)   void write(String s, int offset, int length)   close()   flush() FileInputStream FileOutputStream BufferedReader   readLine()---每次调用就会读取一行 BufferedWriter   writeLine(String s)---每次调用写出一行

例子:

 1 package com.hanqi.maya.util;
 2 
 3 import java.io.File;
 4 import java.io.FileInputStream;
 5 import java.io.FileNotFoundException;
 6 import java.io.FileOutputStream;
 7 import java.io.IOException;
 8 import java.io.InputStream;
 9 import java.io.OutputStream;
10 
11 public class Test2 {
12     public static void main(String[] args) {
13         File file=new File("E:\ceshi.txt");
14         File ofile=new File("E:\cewshi2.txt");
15         int a=-1;//用作判断
16 
17         try {
18             InputStream in =new FileInputStream(file);
19             OutputStream out = new FileOutputStream(ofile);
20             while((a=in.read())!=-1){//将下一个字符赋给a并输出和写入,如果没有下一个 则a=-1结束while循环
21                 System.out.print((char)a);//强转输出字符
22                 out.write(a);//写入到文件
23             }
24             in.close();
25             out.close();
26         } catch (FileNotFoundException e) {
27             e.printStackTrace();
28         } catch (IOException e) {
29             e.printStackTrace();
30         }
31     }
32 }
 1 package com.hanqi.maya.util;
 2 
 3 import java.io.BufferedReader;
 4 import java.io.BufferedWriter;
 5 import java.io.File;
 6 import java.io.FileInputStream;
 7 import java.io.FileNotFoundException;
 8 import java.io.FileOutputStream;
 9 import java.io.FileReader;
10 import java.io.FileWriter;
11 import java.io.IOException;
12 import java.io.InputStream;
13 import java.io.OutputStream;
14 import java.io.Reader;
15 import java.io.Writer;
16 
17 public class Test3 {
18     public static void main(String[] args) {
19         File file=new File("E:\ceshi.txt");
20         File ofile=new File("E:\cewshi8.txt");
21         
22         Reader r=null;
23         
24         try {
25             r=new FileReader(file);
26             Writer w=new FileWriter(ofile);
27             BufferedReader br=new BufferedReader(r);
28             BufferedWriter bw=new BufferedWriter(w);
29             String s=null;
30             while((s=br.readLine())!=null){
31                 System.out.print(s);
32                 bw.write(s);
33                 bw.flush();//如果写入需要用 flush 刷新流,否则会在缓冲区不写入文件
34             }
35             br.close();
36             bw.close();//调用该方法前会自动调用 flush 
37         } catch (FileNotFoundException e) {
38             
39             e.printStackTrace();
40         } catch (IOException e) {
41             e.printStackTrace();
42         }
43     }
44 }