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)。根据流向不同,可以分为:输入流和输出流。  其中主要结构可以用下图来表示:

完结.....

《成功在于坚持》

时间: 2024-10-26 20:55:13

Java_IO流_File类配合使用(其中用到了递归)的相关文章

Java_IO流——File类(2)

File类使用练习1 1.输出指定目录下面指定后缀的文件名称 判断E盘目录下面是否有后缀命名为.txt的文件,如果有,就输出此文件名称. 2.分析: (1).封装E盘目录 (2).获取该目录下面所有文件或者文件夹的File数组,用于判断是不是文件 (3).遍历该File数组,获取每一个File对象,然后判断 (4).是否是文件 是:继续判断是否是以.txt文件结尾 是:就输出该文件名称 否:就不管 否:就不管 3.改进: 使用文件名称过滤器改进 方法: public String[] list(

java 字节流和字符流转换类InputStreamReader,OutPutStreamReader

import java.io.*; public class BufferDemo { public static void main(String[] args) throws IOException { BufferedReader buf=null; buf=new BufferedReader(new InputStreamReader(System.in)); System.out.print("Please enter a number:"); String str=buf

转换流--OutputStreamWriter类与InputStreamReader类

12.4  转换流--OutputStreamWriter类与InputStreamReader类 整个IO包实际上分为字节流和字符流,可是除了这两个流之外,还存在一组字节流-字符流的转换类. OutputStreamWriter:是Writer的子类,将输出的字符流变为字节流,即将一个字符流的输出对象变为字节流输出对象. InputStreamReader:是Reader的子类,将输入的字节流变为字符流,即将一个字节流的输入对象变为字符流的输入对象. 假设以文件操作为例,则内存中的字符数据须要

java流工具类使用很方便

package com.auto.generate.utils ; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; /** * File Name: StreamTool.jav

java限流工具类

代码 import com.google.common.util.concurrent.RateLimiter; import java.util.concurrent.ConcurrentHashMap; /** * 限流工具类 * @author ZhangShuzheng * @date 2018/8/13 */ public class RateLimiterManager { private static ConcurrentHashMap<String, RateLimiter>

java中父类与子类, 不同的两个类中的因为构造函数由于递归调用导致栈溢出问题

1 /* 2 对于类中对成员变量的初始化和代码块中的代码全部都挪到了构造函数中, 3 并且是按照java源文件的初始化顺序依次对成员变量进行初始化的,而原构造函数中的代码则移到了构造函数的最后执行 4 */ 5 import static java.lang.System.out; 6 7 public class PersonDemo 8 { 9 public static void main(String[] args) 10 { 11 //*********测试父类与子类之间的循环调用的问

转换流——OutputStreamWriter类与InputStreamReader类

字节流和字符流的转换类 OutputStreamWriter:是Writer的子类,将输出的字符流变成字节流 InputStreamReader:是Reader的子类,将输入的字节流变成字符流 将字节输出流变成字符输出流 //================================================= // File Name : OutputStreamWriter_demo //----------------------------------------------

Java的IO流各个类的使用原则

参考:http://blog.csdn.net/ilibaba/article/details/3955799 Java IO 的一般使用原则(花多眼乱,其实每个类都有专门的作用): 这里有详细介绍:Java的IO输入输出流类的介绍(有图) 一.按数据来源(去向,也就是颗粒)分类: 1 .文件: FileInputStream, FileOutputStream, (字节流) FileReader, FileWriter(字符流) 2 .字节数组 byte[]: ByteArrayInputSt

黑马程序员_File类与递归

一.概述: 1.File类:在整个IO包中与文件本身有关的操作类,所有的与文件本身有关指的是创建.删除文件等操作.在java.io包中的File类本身是一个跨平台的文件操作类,所以在操作中要更多的考虑到各个操作系统的区别. 2.特点: 1)用来将文件或文件夹封装成对象 2)方便于对文件与文件夹的属性信息进行操作 3)File对象可以作为多数传递给流的构造函数 二.常用方法: File类 File 即指文件也指文件夹. File类构造方法和字段摘要 staticString pathSeparat