zoukankan      html  css  js  c++  java
  • Java_IO流_File类配合使用(其中用到了递归)

    第一:Java File类的功能非常强大,利用Java基本上可以对文件进行所有的操作。以下对Java File文件操作以及常用方法进行简单介绍

    案例1:遍历出指定目录下的文件夹,并输出文件名

     1 static void findDirectory() {
     2         //构建file对象,指定目录路径(separator 跨平台分隔符)
     3         File root = new File("E://") ;//传的是String,因为是路径,所有按照格式写eg:"E://"与"E:"+File.separator功能相同
     4         //判断是否存在这个路径(一定要写这个判断,不写,如果不存在会报NullPointerException异常)
     5         if(root.exists()) { 6             //取出指定路径下所有文件及文件夹对象
     7             File[] files = root.listFiles() ;
     8             for (File file : files) {
     9                 if(file.isDirectory()) {//如果是文件夹(如果不行,会把文件与文件夹的名称一起输出)
    10                     System.out.println("文件夹名称:"+file.getName());
    11                 }
    12             }
    13         }
    14     }

    以上相关方法简单解释

    1.boolean exists() 判断文件(文件和文件夹)是否存在

    2.boolean isDriectory() 判断文件夹是否存在

    3.String getName() 获取文件的名称

    案例2://判断E:盘AA/下有没有一个BB文件夹,如果没有,创建它,如果有,在里面创建文件tt.txt

     1 static void createFile() throws IOException{
     2         File file=new File("E:/AA/BB/CC/tt.txt");
     3         //先判断该文件上级(BB)目录是否存在
     4         if(!file.getParentFile().exists()){
     5             //创建多级文件夹
     6             file.getParentFile().mkdirs() ;
     7             System.out.println("文件夹创建完毕..");
     8         }
     9         if(!file.exists()){
    10             //创建文件
    11             file.createNewFile();
    12         }
    13     }

    以上用到的相关方法简单解释

    1.String getParentFile() 如果没有父目录返回null

    2.boolean mkdir() 创建目录

    3.boolean mkdirs() 创建多级目录

    4.boolean createNewFile() 如:E:/AA/tt.txt 如果存在指定目录就返回true否则返回false,不管tt文件是否存在都会返回true,但是如果不存在tt文件则创建tt文件然后返回true

    案例3:遍历出指定路径下所有文件(使用了递归)

     1 static void outFileName(String path){
     2         File rt=new File(path);
     3         if(!rt.exists())
     4             return;
     5         File[] files=rt.listFiles();
     6         if(files!=null&&files.length>0){//这个判断很重要
     7             for (int i = 0; i < files.length; i++) {
     8                 if(files[i].isFile()){
     9                     System.out.println(files[i].getName());
    10                 }else{
    11                     //遇到了文件夹【将该文件夹路径传递到一个根据路径查询文件的方法中】
    12                     outFileName(files[i].getAbsoluteFile().toString());//此处实现了递归
    13                 }
    14             }
    15         }
    16     }

    以上用到的相关方法简单解释

    1. File[] listFiles() 当路返回null有两种情况:第一,路径不存在;第二,路径存在,但没有访问权限

    2.   long     length()

    第二:IO流_File类的结合应用,实现文件的复制

    1.IO流的分类

      根据处理数据类型的不同分为:字符流和字节流

      根据数据流向不同分为:输入流(InputStream)和输出流(OutputStream)

        ->对输入流只能进行读操作,对输出流只能进行写操作

    eg:由于字节流能处理所有类型的数据(如:图片,视频等),所以此处用字节流做演示

    案例4:指定文件,在控制台输出文件内容

     1 static void outFileContext() throws Exception{
     2         File file=new File("E:/ch01.txt");
     3         if(file.exists()){
     4             //构建一个输入流
     5             InputStream in=new FileInputStream(file);
     6             int size=in.available();
     7             System.out.println("文件大小:"+size);
     8             byte[] bytes=new byte[size];
     9             in.read(bytes);
    10             in.close();
    11             String str=new String(bytes);
    12             System.out.println("内容:"+str);
    13         }
    14     }

    以上用到的相关方法简单解释

    1.int available() 估计返回此文件字节数大小

    2.int read(byte[] b) 从输入流中读取一定数量的字节,并将其存储在缓冲区数组 b

    案例5:输入流+输出流+File类实现文件的copy和动态移动

     1 static void copyFile() throws Exception{
     2         File file=new File("E:/ch01.txt");
     3         if(file.exists()){
     4             //构建一个输入流
     5             InputStream in=new FileInputStream(file);
     6             //构建一个输出流
     7             OutputStream out=new FileOutputStream("E:/newFile.txt");
     8             byte[] bytes=new byte[1024];
     9             int temp=0;
    10             while((temp=in.read(bytes))!=-1){
    11                 out.write(bytes);
    12             }
    13             out.flush();//刷新输出流缓存
    14             out.close();//关闭输出流缓存
    15             in.close();//关闭输入流缓存
    16         }
    17     }

    注意:第10行,当读到文件末尾的时候会返回-1.正常情况下是不会返回-1的。

    ----------------------------------------------------------------------------------------------------------------------------------

    总结:File类+IO流结合使用时非常常见的是对文件进行操作,这样可以对文件进行增删改查复制移动等操作都是可以的以上案例只能让你了解一些基本入门操作

    拓展:以下是File常用的方法

    判断方法

    1.boolean canExecute()判断文件是否可执行

    2.boolean canRead()判断文件是否可读

    3.boolean canWrite() 判断文件是否可写

    4.boolean exists() 判断文件是否存在

    5.boolean isDirectory()

    6.boolean isFile()

    7.boolean isHidden()

    8.boolean isAbsolute()判断是否是绝对路径 文件不存在也能判断

    获取方法

    1.String getName()

    2.String getPath()

    3.String getAbsolutePath()

    4.String getParent()//如果没有父目录返回null

    5.long lastModified()//获取最后一次修改的时间

    6.long length()

    7.boolean renameTo(File f)

    8.File[] liseRoots()//获取机器盘符

    9.String[] list()

    10.String[] list(FilenameFilter filter)

    拓展:以下是关于IO流的关系图

            IO流主要用于硬板、内存、键盘等处理设备上得数据操作,根据处理数据的数据类型的不同可以分为:字节流(抽象基类为InPutStream和OutPutStream)和字符流(抽象基类为Reader和Writer)。根据流向不同,可以分为:输入流和输出流。  其中主要结构可以用下图来表示:

                                             

    完结.....

                                                                                                      《成功在于坚持》

  • 相关阅读:
    JSBinding+SharpKit / MonoBehaviour替换成JSComponent原理
    JSBinding + SharpKit / JavaScript 加载流程
    JSBinding + SharpKit / 常见问题
    JSBinding + SharpKit / Coroutine支持
    Mysql 自定义HASH索引带来的巨大性能提升----[真相篇]
    Mysql 自定义HASH索引带来的巨大性能提升----[挖坑篇]
    python实现冒泡排序
    python 实现二分法查找
    Mysql 存储过程+定时任务,完成分区自动维护
    innodb insert buffer 插入缓冲区的理解
  • 原文地址:https://www.cnblogs.com/js2ja/p/6076072.html
Copyright © 2011-2022 走看看