欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

I/O流

程序员文章站 2022-06-13 22:23:00
...

一.文件

I/O流
相关记录或放在一起的数据集合,存放在光盘,硬盘中
*
访问文件属性:java.io.File类
*
创建文件对象
*
File a=new File(String 地址) //“c:\test,txt” 或 “c:/test.txt”
*
调用方法
*
a.exists() 【返回值boolean】//判断文件或者目录是否存在
*
a.isFile() 【返回值boolean】//判断是否是文件
*
a.isDirectory() 【返回值boolean】//判断是否是目录
*
a.getPath() 【返回值String】 //返回文件的相对路径名
*
a.getAbsolutePath() 【返回值String】 //返回文件的绝对路径名
*
a.getName() 【返回值String】 //返回文件或者目录的名字
*
a.delete() 【返回值boolean】 //删除文件或目录
*
a.createNewFile() 【返回值boolean】 //创建空文件,不创造文件夹
*
a.length() 【返回值long】//返回文件长度,单位是字节;如果文件不存在返回0L
*
一个汉字字符是2个字节,一个英文字符是一个字节

packagecn.com.abner.IO.File;
import java.io.File;
import java.io.IOException;
//文件操作:创建文件,查看文件的相关信息,删除文件
public class Demo1 {
     //创建文件
     public void CJ(File it) {
          if(!it.exists()) {
              try {
                   it.createNewFile();
                   System.out.println("文件创建");
              } catch (IOException e) {
                   // TODO Auto-generated catch block
                   e.printStackTrace();
              }
          }
     }
     //查看文件的相关信息
     public void show(File it) {
          if(it.exists()) {                 //文件存在查看信息
              if(it.isFile()) {            //是文件
                   System.out.println("该文件名是: "+it.getName());
                   System.out.println("文件的相对路径:"+it.getAbsolutePath());
                   System.out.println("文件的绝对路径:"+it.getPath());
                   System.out.println("文件大小:"+it.length()+"字节");
              }             
          }else {
              System.out.println("文件不存在");
          }
     }
     //删除文件
     public void delete(File it) {
          if(it.exists()) {
              it.delete();
              System.out.println("文件删除");
          }
     }
     public static void main(String[] args) {
          Demo1 a=new Demo1();
          File it=new File("d:/abner/testIT.txt");   //要确认这个文件夹存在
          File b=new File("testB.txt");
          a.CJ(it);
          a.CJ(b);
          a.show(it);
          a.show(b);
          a.delete(b);
     }
}
**

二.流

流是一组有序的数据序列
*
输入流(InputStream):来自数据源的数据流 【程序读】
*
输出流(OutputStream):流向目的地的数据流 【程序写】
*
分类
*
按流向分类
*
输出流
*
outputStream或Write作为父类
*
输入流
*
InputStream或Reader作为父类
*
按处理数据单元划分
*
字节流
*
字节输入流
*
字节输出流
*
字符流
*
字符输入流
*
字符输出流

三.字节流

* 

1.字节输入流InputStream 【抽象类】
*
常用方法
*
1.对象.read() 【返回int】 //把输入流的数据一个字节一个字节的读取,返回对应的整数,到了输入流的末尾返回-1
*
2.对象.read(byte [] b) 【返回int】 //把输入流的若干字节保存在在数组b中,读取,返回字节数,到了输入流的末尾返回-1
*
3.对象.read(byte [] b,int off,int len) 【返回int】 //把输入流的off字节开始之后的len个字节保存在在数组b中,读取,返回对应的字节数,到了输入流的末尾返回-1
*
4.对象.close(); //关流
*
5.对象.available(); //可以从输入流中读取到的字节数目
*
FileInputStream 【子类】
*
构造方法
*
FileInputStream(File file) //文件
*
FileInputStream(String path) //路径
*
使用步骤
*
引入类
*
构造输入流FileInputStream对象
*
读取文件的数据
*
关闭文件流数据

packagecn.com.abner.IO.byte1;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
//读取d:\abner\testIT.txt文件内容
public class Demo {
     public static void main(String[] args) {
          FileInputStream it=null;
          try {
              it=new FileInputStream("d:\\abner\\testIT.txt");
              try {
                   System.out.println("可以读取的字节流字节数目"+it.available());          //5.对象.available(); //可以从输入流中读取到的字节数目
              } catch (IOException e1) {
                   e1.printStackTrace();
              }
              //read()
//            int data;
//            try {
//                 while((data=it.read())!=-1) {               //1.对象.read() 把输入流的数据一个字节一个字节的读取,返回对应的整数,到了输入流的末尾返回-1
//                      System.out.print((char)data);
//                 }
//            } catch (IOException e) {
//                 e.printStackTrace();
//            }
              //对象.read(byte [] b)
              byte[] b=new byte[1024];
              int date1 = 0;     //字节数
              try {
                   while((date1=it.read(b))!=-1) {
                        for(int i=0;i<date1;i++) {             //2.对象.read(byte [] b) 把输入流的若干字节保存在在数组b中,读取,返回字节数,到了输入流的末尾返回-1
                             System.out.print((char)b[i]);
                        }
                   }
              } catch (IOException e) {
                   e.printStackTrace();
              }             
          } catch (FileNotFoundException e) {
              e.printStackTrace();
          } finally {
              //关闭流
              try {
                   it.close();             //4.对象.close(); //关流
              } catch (IOException e) {
                   e.printStackTrace();
              }
          }
     }
}
	* 

2.字节输出流OutputStream 【抽象类】
*
常用方法
*
1.对象.write( int c) 【返回void】 //把数据一个字节一个字节的写
*
2.对象.write(byte [] buf) 【返回void】
*
3.对象.write(byte [] b,int off,int len) 【返回void】 //把数据的off字节开始之后的len个字节写出来
*
4.对象.close(); //关流
*
5.对象.flush(); //强制把缓冲区的数据写到输出流中
*
FileOutputStream 【子类】
*
构造方法
*
FileOutputStream(File file) //文件
*
FileOutputStream(String path) //路径
*
FileOutputStream(String path,boolean append) //指定覆盖或者追加文件内容
*
append=true; //原有文件中追加数据
*
append=false; //覆盖原有文件数据
*
使用步骤
*
引入类
*
构造输入流FileOutputStream对象
*
写文件的数据
*
关闭文件流数据

packagecn.com.abner.IO.byte1;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class Demo2 {
     public static void main(String[] args) {
          FileOutputStream a=null;
          try {
              a=new FileOutputStream("d:\\abner\\hollo.txt");
              String word="hollo abner!";
              byte[] b=word.getBytes();             //将字节数组打算在字节数组中
              try {
                   a.write(b,0,b.length);
                   System.out.println("写入成功");
              } catch (IOException e) {
                   e.printStackTrace();
              }             
          } catch (FileNotFoundException e) {
              e.printStackTrace();
          }finally {
              //关流
              try {
                   a.close();
              } catch (IOException e) {
                   e.printStackTrace();
              }
          }         
     }
}
	* 

--------------------综合练习-----------------------

packagecn.com.abner.IO.byte1;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
//D:\\abner\\我的青春谁做主.txt文件内容写到C:\\Users\\Administrator\\Desktop\\新建文件夹\\hollo.txt中
public class Demo3 {
     public static void main(String[] args) {
          FileInputStream a=null;
          FileOutputStream b=null;
          try {
              a=new FileInputStream("D:\\abner\\我的青春谁做主.txt");
              b=new FileOutputStream("C:\\Users\\Administrator\\Desktop\\新建文件夹\\hollo.txt",true);
              byte[] c=new byte[1024];
              int len=-1;
              try {
                   while((len=a.read(c))!=-1) {
                        b.write(c,0,len);
                   }
              } catch (IOException e) {
                   e.printStackTrace();
              }
          } catch (FileNotFoundException e) {
              e.printStackTrace();
          }finally {
              //关流
              try {
                   a.close();
                   b.close();
              } catch (IOException e) {
                   e.printStackTrace();
              }
          }
     }
}

四.字符流

* 

1.字符输入流 Reader
*
常用方法
*
1.对象.read() 【返回int】 //把输入流的数据一个字符一个字字符的读取,返回对应的整数,到了输入流的末尾返回-1
*
2.对象.read(char[] b) 【返回int】 //把输入流的若干字符保存在在字符数组b中,读取,返回字符数,到了输入流的末尾返回-1
*
3.对象.read(char [] b,int off,int len) 【返回int】 //把输入流的off字符开始之后的len个字符保存在在数组b中,读取
*
4.对象.close(); //关流
*
InputStreamReader 【子类】//解决编译不同,中文乱码
*
构造方法
*
InputStreamReader (InputStream)
*
InputStreamReader (InputStream,String charSetname) //定义字符编码格式
*
FileReader 【子类】
*
构造方法
*
FileReader (File file) //文件
*
FileReader (String path) //路径
*
使用步骤
*
引入类
*
构造输入流FileReader 对象
*
读取文件的数据
*
关闭文件流数据

packagecn.com.abner.IO.char1;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.Reader;
import java.io.UnsupportedEncodingException;
//读取D:\\abner\\我的青春谁做主.txt
public class Demo2 {
     public static void main(String[] args) {
          Reader a=null;
          FileInputStream f=null;
          try {
//            a=new FileReader("D:\\abner\\我的青春谁做主.txt");
              f=new FileInputStream("D:\\abner\\我的青春谁做主.txt");       
              try {
                   a=new InputStreamReader(f,"GBK"); //解决字符编码异常,中文乱码
              } catch (UnsupportedEncodingException e1) {
                   // TODO Auto-generated catch block
                   e1.printStackTrace();
              }
              StringBuffer s=new StringBuffer();         //将字符添加到StringBuffer
              char[] c=new char[1024];
              try {
                   while((a.read(c))!=-1) {
                        s.append(c);
                   }
                   System.out.println(s);
              } catch (IOException e) {
                   e.printStackTrace();
              }
          } catch (FileNotFoundException e) {
              e.printStackTrace();
          }finally {
              try {
                   f.close();
                   a.close();
              } catch (IOException e) {
                   e.printStackTrace();
              }
          }
     }
}
* 
* 

BufferedReader 【缓冲流】
构造方法:BufferedReader(Reader);
readLine();

package cn.com.abner.IO.char1;

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.Reader;
import java.io.UnsupportedEncodingException;
import java.util.stream.Stream;
//读取D:\\abner\\我的青春谁做主.txt
public class Demo3 {
    public static void main(String[] args) {
        Reader a=null;
        FileInputStream f=null;
        BufferedReader r=null;
        try {

//            a=new FileReader("D:\\abner\\我的青春谁做主.txt");
            f=new FileInputStream("D:\\abner\\我的青春谁做主.txt");        
            try {
                a=new InputStreamReader(f,"GBK");    //解决字符编码异常,中文乱码
            } catch (UnsupportedEncodingException e1) {
                e1.printStackTrace();
            }
            r=new BufferedReader(a);                //缓冲区,一行一行的读
            String line=null;
            try {
                while((line=r.readLine())!=null) {
                    System.out.println(line);
                }
            } catch (IOException e) {
                e.printStackTrace();
            }    
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }finally {
            try {
                f.close();
                a.close();
                r.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}
* 

2.字符输出流 Writer
*
常用方法
*
1.对象.write( String str)
*
2…对象.write(String str,int off,int len) 【返回void】 //把数据的off字符串开始之后的len写出来
*
4.对象.close(); //关流
*
5.对象.flush(); //强制把缓冲区的数据写到输出流中
*
OutputStreamWriter 【子类】//解决编译不同,中文乱码
*
构造方法
*
OutputStreamWriter(OutputStream)
*
OutputStreamWriter(OutputStream,String charSetname) //定义字符编码格式
*
FileWriter 【子类】
*
构造方法
*
FileWriter(File file) //文件
*
FileWriter(String path) //路径
*
FileWriter(String path,boolean append) //指定覆盖或者追加文件内容
*
append=true; //原有文件中追加数据
*
append=false; //覆盖原有文件数据
*
使用步骤
*
引入类
*
构造输入流FileWriter 对象
*
写文件的数据
*
关闭文件流数据

packagecn.com.abner.IO.char1;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
public class Demo4 {
     public static void main(String[] args) {
          Writer it=null;
          try {
              it=new FileWriter("C:\\Users\\Administrator\\Desktop\\新建文件夹\\hollo.txt", true);
              String a="写入文件";
              it.write("\r\n");                 //换行写数据
              it.write(a);
              it.flush();
          } catch (IOException e) {
              e.printStackTrace();
          }finally {
              try {
                   it.close();
              } catch (IOException e) {
                   e.printStackTrace();
              }
          }
     }
}
package cn.com.abner.IO.char1;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.Writer;

public class Demo6 {
    public static void main(String[] args) throws InterruptedException {
        Writer a=null;
        FileOutputStream b=null;
                try {
            b=new FileOutputStream("C:\\Users\\Administrator\\Desktop\\新建文件夹\\hollo.txt",true);
            a=new OutputStreamWriter(b,"GBK");
            a.write("\r\n");
            a.write("我不玩");                        
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            try {
                a.close();
                b.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

}
* 

BufferedWriter 【缓冲流】
*
构造方法:BufferedWriter(writer);
*
newLine().创建新的一行

packagecn.com.abner.IO.char1;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
public class Demo5 {
     public static void main(String[] args) {
          Writer a=null;
          BufferedWriter b=null;
          try {
              a=new FileWriter("C:\\Users\\Administrator\\Desktop\\新建文件夹\\hollo.txt",true);
              b=new BufferedWriter(a); 
             b.newLine();
              b.write("我不玩蛇!");
          } catch (IOException e) {
              e.printStackTrace();
          }finally {
              try {
                   b.close();
                   a.close();
              } catch (IOException e) {
                   e.printStackTrace();
              }
          }
               }
}

综合练习: //第一个文件中的问题,把答案写到第二个文件中

packagecn.com.abner.IO.char1;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.Reader;
import java.io.UnsupportedEncodingException;
import java.io.Writer;
import java.util.Scanner;
public class Demo {
     public static void main(String[] args) {
          Scanner input =new Scanner(System.in);
          int i=1;
          //读问题
          Reader a=null;
          FileInputStream b=null;
          StringBuffer c=new StringBuffer();
          try {
              b=new FileInputStream("C:\\Users\\Administrator\\Desktop\\新建文件夹\\aaa.txt");
              try {
                   a=new InputStreamReader(b, "GBK");
                   char[] v=new char[1024];
                   try {
                        while((a.read(v))!=-1) {
                             c.append(v);
                             System.out.println(c);                          
                        }
                   } catch (IOException e) {
                        e.printStackTrace();
                   }                  
              } catch (UnsupportedEncodingException e) {
                   e.printStackTrace();
              }
          } catch (FileNotFoundException e) {
              e.printStackTrace();
          }finally {
              try {
                   a.close();
                   b.close();
              } catch (IOException e) {
                   e.printStackTrace();
              }
          }
          //写答案
          Writer w=null;
          FileOutputStream o=null;
          try {
              o=new FileOutputStream("C:\\Users\\Administrator\\Desktop\\新建文件夹\\bbb.txt");
              try {
                   w=new OutputStreamWriter(o, "GBK");
                   do {
                        System.out.println("请输入第"+i+"个问题的答案");
                        String annal=input.next();
                        try {
                             if(i==2) {
                             w.write("\r\n");
                             }
                             w.write(annal);
                        } catch (IOException e) {
                             e.printStackTrace();
                        }
                        i++;
                   }while(i<=2);
                   System.out.println("答案录入成功");
              } catch (UnsupportedEncodingException e) {
                   e.printStackTrace();
              }
          } catch (FileNotFoundException e) {
              e.printStackTrace();
          }finally {
              try {
                   w.close();
                   o.close();
              } catch (IOException e) {
                   e.printStackTrace();
              }
          }         
     }
}
相关标签: I/O流