流向:
输入流 读取数据
输出流 写出数据
数据类型:
字节流
一个字节占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
功能: 节点流: 只有一个根管道套在文件上进行传输 处理流: 将节点流处理一下, 增强管道的功能, 相当于在管道上套一层
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 }
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 }