IO流

一、java.io 包,输入输出包。当我们需要做文件的处理,比如上传下载等,都需要使用到 java.io 包。

1、File 类:
   (1)File 类的相关概念
          ①、File类是Java.io 包中很重要的一个类;
          ②、File类的对象可以表示文件,还可以表示目录,在程序中一个 File 类对象可以代表一个文件或目录;
          ③、File对象可以对文件或目录的属性进行操作,如文件名、最后修改日期,文件大小等;
          ④、File对象无法操作文件的具体数据,即不能直接对文件进行读/写操作。

   (2)File类的4种构造方法
          ①、File(String pathname) 指定文件(或目录)名和路径创建文件对象;
  ②、File(File parent, String child)  根据 parent 抽象路径名和 child 路径名字符串创建一个新 File 实例;
          ③、File(String parent, String child)  根据 parent 路径名字符串和 child 路径名字符串创建一个新 File 实例;
  ④、File(URI uri) 通过将给定的 file: URI 转换为一个抽象路径名来创建一个新的 File 实例。

         例如:
       //在当前目录下创建一个与aaa.txt文件名相关联的文件对象
              File f1=new File("aaa.txt");
    //指明详细的路径及文件名,请注意双斜线或者用单反斜杠
    File f2=new File("D:\\java\\Hello.java");
    //指明详细的路径及目录名,请注意双斜线
    File f3=new File("D:\\java");

     (3)File类的常用的方法
       boolean exists()  判断文件是否存在,存在返回true,否则返回false;
       boolean isFile()  判断是否为文件,是文件返回true,否则返回false;
       boolean isDirectory()  判断是否为目录,是目录返回true,否则false;
          String getName()  获得文件名;
          String getAbsolutePath()  获得文件的绝对路径;
       long length()  获得文件的长度(字节数);
                boolean createNewFile() throws IOException  创建新文件,创建成功返回true,否则返回false,有可能抛                   出IOException异常,必须捕捉;
       boolean delete()  删除文件,删除成功返回true,否则返回false。

    例如:
  public static void main(String[] args) {
  //创建File对象
  File file = new File("notes.txt");
  File dir = new File("E:\\project");

  System.out.println("file是否是文件:"  +  file.isFile());
  System.out.println("dir是否是目录:"  +  dir.isDirectory());
  System.out.println("file是否可读:"  +  file.canRead());
  System.out.println("file是否存在:"  +  file.exists());
                 }

   File类的遍历
    public String[] list()  将目录下的子目录以及文件的名字,返回到String数组中
    public File[] listFile()  将目录下的子目录以及文件的实例返回到File数组中
           
 例如:
     public static void main(String[] args) {
File file=new File("D:\\test");
String[] fileNameList=file.list();   //使用list方法
for(String s:fileNameList){
     System.out.println(s);
}
  File[] fileList=file.listFiles();   //使用listFiles方法
for(File f:fileList){
System.out.println(f.getAbsolutePath());
        }
               } 


   (4)文件/文件名过滤器
          ①、文件名的过滤器接口:interface FilenameFilter 常常用来过滤不符合规格的文件名
       
      ②、需要重写 accept 方法自定义过滤器规则
             方法:
                boolean accept(File dir,String name)
          dir:表示文件的当前目录
          name:表示当前目录的子目录或者文件的名字
          
   ③、File类中提供了使用文件名过滤器遍历目录的方法
             方法:
                 String[] list(FilenameFilter filter)
             把满足指定过滤条件的文件和目录,返回到String数组中
           
   File[] listFiles(FilenameFilter filter)
      把满足制定过滤条件的文件和目录,返回到File的数组中
                 
例如:
    import java.io.*;
    public class FileNameFilterDemo {
    public static void main(String [] args){
  File file=new File("D:\\123");
  String [] strfile=file.list(new NameFilter(".txt"));
  for(String s : strfile){
  System.out.println("后缀名是.txt文件是="+s);
   }
      }
      }
    
    class NameFilter implements FilenameFilter{
       private String endStr;        
       public NameFilter(String endStr){
        super();
        this.endStr=endStr;
       }

       public boolean accept(File dir, String name) {
         return name.endsWith(endStr);
       }
    }

④、文件过滤器接口:interface FileFilter 通常用于检测文件是否存在
    
        ⑤、需重写 accept 方法自定义过滤规则
           方法:
              boolean accept(File pathName)
        pathName:表示当前目录的子目录或者文件的名字
         
   ⑥、File类中提供了使用文件过滤器遍历目录的方法
                          File[] listFiles(FilenameFilter filter) 把满足制定过滤条件的文件盒目录,返回到file数组中
            
  例如:
                 public static void main(String[] args) {
       File file=new File("D:\\123");
       File [] files=file.listFiles(new Filter());
       for(File fil : files){
         System.out.println(fil+" 是目录");
         }

     //过滤器的定义
              class Filter implements FileFilter{
       public boolean accept(File pathname) {
     return  pathname.isDirectory();
       }
     }



2、输入和输出的概念:
   (1)输入输出(I/O)
        ①、是程序与外部设备或其他计算机进行交互的操作
        ②、几乎所有的程序都具有输入与输出的操作
        ③、如从键盘上读取数据,从本地或者网络上的文件读取数据或写入数据等
        ④、通过输入和输出操作可以从外界接收信息,或者把信息传递给外界
        ⑤、Java把这些输入和输出操作用流来实现,通过统一的接口来表示,从而使程序设计更为简单
   
   (2)输入还是输出是相对于内存来说的
   (3)把数据读到内存中,称为输入,即 Input,进行数据的 read 操作
   (4)从内存往外部设备写数据,称为输出,即 Output,进行数据的 write 操作


3、输入输出流:

   (1)流按数据的传输方向分为
       ①、输入流:往内存中读叫做输入流
       ②、输出流:从内存中往外面写叫做输出流
       
  (2)所有输入流都是 InputStream 类或者 Reader 类的子类
       ①、类名以 InputStream 结尾的类都是 InputStream 的子类
       ②、类名以 Reader 结尾的类都是 Reader 类的子类
       
  (3)所有输出流都是 OutputStream 类或者 Writer 类的子类 
       ①、类名以 OutputStream 结尾的类都是 OutputStream 的子类
       ②、类名以 Writer 结尾的类都是 Writer 类的子类


4、根据输入输出是的编码不同,可以分为字节流和字符流:

   从数据流编码格式上划分
     -字节流
     -字符流
     
   InputStream 和 OutputStream 的子类都是字节流
     -可以读写二进制文件,主要处理音频,图片,歌曲,字节流处理单元为1字节
     
   Reader 和 Writer 的子类都是字符流
     -主要处理字符或者字符串,字符流处理单元为2个字节
     -字节流将读取到的字节数据,去制定的编码表中获取对应文字
 
字节流中常用类
     -字节输入流 FileInputStream
     -字节输出流 FileOutputStream
     
字符流中常用类
     -字符输入流 FileReader
     -字符输出流 FileWriter


5、节点流和处理流:

   根据封装的类型不同流分为
       -节点流:如果流封装的是某种特定的数据源,如文件,字符串,字符串数组等,称为节点流
       -处理流:如果流封装的是其他流对象,称为处理流。处理流提供了缓冲功能,提高读写效率

   节点流常用类
   字节输入流:FileInputStream
   字节输出流:FileOutputStream
     字符输入流:FileReader
     字符输出流:FileWriter
     
   处理流中常用的类
   缓冲字节输出流:BufferedOutputStream
   缓冲字节输入流:BufferedIutputStream
   缓冲字符输入流:BufferedReader
   缓冲字符输出流:BufferedWriter
   
   处理流的特点
   字符缓冲输入流提供了读取一行的方法 readLine()
   字符缓冲输出流提供了写入一个空行的方法 newLine()
      字符缓冲输出流,把写入的数据先写入到内存,再使用 flush() 方法将内存数据刷到硬盘
      
      注意:在使用字符缓冲输出流是,一定先 flush(),然后 close(),避免数据的丢失


6、字节流和字符流的转换:
   (1)转换流的由来
       字符流与字节流之间的桥梁
       方便了字符流与字节流之间的操作

   (2)转换流的应用
         字节流中的数据都是字符时,转成字符流操作更高效率

   (3)字节流转换成字符流的桥梁
          -InputStreamReader
          
        例如:
           InputStreamReader(InputStream in)
     InputStreamReader(InputStream in,String charsetName)

   (4)字符流转换成字节流的桥梁
          -OutputStreamWriter
          
       例如:
          OutputStreamWriter(OutputStream out)
        OutputStreamWriter(OutputSttream out String charsetName)
        
      注意:它读入字节,并根据制定编码方式,将之转换为字符流使用的编码方式可能由名称指定,或平台可接受的                    缺省编码方式

   (5)转换流程图
   
          InputStream in = System.in;
                 ||
         InputStream isr = new InputStream(in);
                 ||
       BufferedReader br = new BufferedReader(isr);
                 ||
             String line = br.readLine(); 


   (6)字符流转成字节流图解
   
    FileOutputStream fs= new FileOutputStream("D:\\demo.txt");
                  ||
  OutputStreamWriter ow= new OutputStream(fs);
                  ||
       BufferWriter  bw= new BufferedWriter(ow);
                  ||
           bw.write(line);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值