IO(输入_输出)1——文件处理


File

概述

File类:File文件和目录路径名的抽象表示形式。即,Java中把文件或者目录(文件夹)都封装成File对象。也就是说如果我们要去操作硬盘上的文件,或者文件夹只要找到File这个类即可。

概念:对文件和文件夹(目录)的统称

作用:操作文件和文件夹(操作指:创建、删除、获取)

File类的静态字段

在这里插入图片描述

import java.io.File;
/*
 *File类的静态字段
 * static String pathSeparator:代表当前操作系统的路径分隔符,
 * pathSeparator是以字符串的形式表示
       例如:当前widows系统路径分隔符";"
 static char pathSeparatorChar:代表当前操作系统的路径分隔符,
 * pathSeparatorChar是以字符的形式表示
        例如:当前widows系统路径分隔符';'

 static String separator:代表当前操作系统的名称分隔符
 * separator是以字符串的形式表示
         例如:当前widows名称分隔符"\\"
 static char separatorChar:代表当前操作系统的名称分隔符
 * separator是以字符的形式表示
         例如:当前widows名称分隔符'\\'
 */
public class Demo01 {
    public static void main(String[] args) {
        //如path环境变量	c:/jdk;c:windows
        System.out.println(File.pathSeparator);//";"代表当前操作系统中的路径分隔符
        System.out.println(File.pathSeparatorChar);//';'//字符类型;不同的操作系统执行这段代码,打印出来的而结果不同
        //因为不同操作系统的路径分隔符不同,说明java跨平台
        //"c:\1.txt"+File.pathSeparator+"d:\a.doc"
		
        //磁盘路径分隔符
        System.out.println(File.separator);// "\" 代表路径中的名称分隔符
        //widnows在路径中以\(反斜杠)来分隔名称
        //d:\abc\1.txt
        System.out.println(File.separatorChar);//'\'
        System.out.println("\\"); //两个\\代表一个普通的\字符
    }
}

相对路径与绝对路径

  • 绝对路径:文件或文件夹的路径中以盘符开头就是绝对路径(唯一路径)

    一旦项目位置发生变化,代码可能会引起异常:找不到文件的异常
    例如:D:\1.txt ;E:\abc\2.txt

  • 相对路径:其中一个文件与另外一个文件相对关系,一定会有一个参照物
    不会因为项目的位置发生变化,而引起代码中路径书写的变化
    例如:
    2.txt的相对路径
    参照物绝对路径:F:\JavaBaseCourse\JavaSEProject\day
    2.txt的绝对路径:F:\JavaBaseCourse\JavaSEProject\day\src\2.txt
    2.txt的相对路径:src\2.txt

File类的构造函数

在这里插入图片描述

  • URI和URL

URL:http://www.baidu.com 统一资源定位符 万维网上的一个唯一访问地址

URI:包括url,和本地的一个磁盘路径D:\aa\2.txt

import java.io.File;

/*File类中的构造方法
    File(String pathname):传入一个路径字符串来构造一个File对象
    File(String parent, String child):传入一个parent(一般穿路径不包含文件名)和一个child(文件或文件夹名字),
    最终底层还是把parent和child做一个拼接,成为一个完整的路径
    File(File parent, String child):传入一个parent的File对象(一般穿路径不包含文件名)和一个child(文件或文件夹名字),
    最终底层还是把parent和child做一个拼接,成为一个完整的路径
 */
public class Demo02 {
    public static void main(String[] args) {
        method();
        //method02();
        //method03();
    }

    private static void method03() {
        // File(File parent, String child)
        File parent=new File("E:\\");
        String child="abc\\后来.txt";

        File f=new File(parent,child);//第一个参数为File类型,因为我们有可能对parent这个路径
        //想调用File类的方法
        System.out.println(f);//E:\abc\后来.txt
    }

    private static void method02() {
        //File(String parent, String child)
        File f=new File("d:\\","2.txt");//第一个参数我们一般传入一个路径但是不包含文件或文件夹
        //第二个参数我们一般写文件或文件夹的名称
        //底层还是把parent和child拼接一块作为一个完整路径
        System.out.println(f);//d:\\2.txt
    }

    private static void method() {
        //File(String pathname)
        File f=new File("F:\\1.txt");//传入的是
        //1.txt文件的绝对路径
        //File对象就代指硬盘1.txt文件
        System.out.println(f);//打印的就是File构造函数中封装的路径
        File f2=new File("M:\\2.txt");//new File的时候不会去检测这个路径在硬盘是否真正存在
        System.out.println(f2.getAbsolutePath());//绝对路径
    }
}
import java.io.File;
import java.util.ArrayList;
import java.util.List;
//判断文件类型,如是不是图片
public class Demo03 {
    public static void main(String[] args) {
        File file = new File("src\\com\\Demo.java");
        String fileName = file.getName();
        System.out.println("文件名:"+fileName);//Demo.java
        //获取后缀名
        String lastName = fileName.substring(fileName.lastIndexOf('.') + 1);//java
        System.out.println(lastName);
        //list集合存储图片格式
        List<String> list = new ArrayList<>();
        list.add("jpg");
        list.add("jpeg");
        list.add("gif");
        System.out.println("是不是图片文件:"+list.contains(lastName.toLowerCase()));//false
    }
}

File类的创建功能

创建文件功能
import java.io.File;
import java.io.IOException;

/*
 *File类的创建功能:利用File类的方法创建文件或文件夹 
 *  创建文件:
 *     boolean createNewFile():
 *                 利用File对象中封装的文件路径,把这个文件创建出来
 *                 如果当前文件创建成功,返回true
 *                 如果当前文件已存在,不再创建,返回false
 *                 如果传入一个计算机不存在路径(不存在盘符),直接抛异常 java.io.IOException: 系统找不到指定的路径
 *                 只能创建文件
 */
public class Demo {
    public static void main(String[] args)throws IOException {
		//boolean createNewFile()
    	//1.创建一个File对象
    	File f=new File("d:\\1.txt");//File对象中封装的是1.txt路径
    	//2.调用createNewFile()创建出1.txt
    	boolean b=f.createNewFile();//创建了一个无内容的1.txt文件    	
    	//打印返回值
    	System.out.println(b);//true   	
    	
    /*	File f2=new File("M:\\2.txt");
    	boolean b2=f2.createNewFile();
    	System.out.println(b2);*/
    	
    	
    	File f3=new File("f:\\新建文件夹");
        boolean b3=f3.createNewFile();//不能创建文件夹创建出来的是一个名字叫做 新建文件夹文件
        System.out.println(b3);
	}
}
创建文件夹功能
/*
 *File类创建目录(文件夹)功能 
 *  boolean mkdir():mkdir是 make directory
 *                  根据File对象中的路径创建目录
 *                  如果创建成功返回true,
 *                  创建失败返回false
 *                  注意:mkdir()只能创建单级文件夹
 *  boolean mkdirs():可以创建单级或多级文件夹,其它的特点跟mkdir一样
 *                  如果创建成功返回true,创建失败返回false
 */

File类的删除功能

/*
 *File的删除功能:
 *  boolean delete():
 *     删除文件或文件夹,如果删除成功返回true,如果删除失败返回false; 
 *     注意:
 *      1.delete()删除的文件不走回车 shift+delete
 *      2.delete()如果删除文件夹,要求这个文件夹必须为空才能删掉
 * 
 */

File类的判断功能

/*File类的判断功能:
 *   boolean exists():测试指定的文件或文件夹在硬盘上是否真的存在,如果存在返回true
 *                    否则就返回false
 *   boolean isDirectory():判断指定的路径是否是一个目录,如果是返回true,否则返回false
     boolean isFile():判断指定的路径是否是文件,如果是返回true,否则返回false
 */

File类的获取功能

创建完了File对象之后,那么File类中都有如下常用方法,可以获取文件相关信息
在这里插入图片描述

/*
 *File类的获取功能:不管路径在硬盘是否真的存在
    String getPath():创建File对象的时候,传入了什么路径,getPath最终就返回什么路径
 *   
  String getAbsolutePath():无论传入什么路径,返回的都是绝对路径
  File getAbsoluteFile():跟上面的功能相同,只不过将返回的绝对路径封装成了一个File对象
  如果返回的路径还想要使用File类的方法,我们就选用 File getAbsoluteFile()功能

 String getParent():获取的是父级路径(除了最后一级路径之前的路径)
 File getParentFile():获取的是父级路径(除了最后一级路径之前的路径),但是返回的是一个File对象,还可以使用File类中的方法

 *   String getName():获取最后一级路径的名称
 *   long length():返回文件的字节大小 
 */

方法示例

import java.io.File;
import java.io.IOException;
//创建:G:\\com\\coydone\\1.txt
public class Demo04 {
    public static void main(String[] args) throws IOException {
        File file = new File("G:\\com\\coydone");
        //判断要创建文件或目录是否存在
        if (!file.exists()){
            boolean flag = file.mkdirs();
            System.out.println(flag);
        }
        //在G:\\com\\coydone下创建1.txt
        File txt1 = new File(file,"1.txt");
        if (!txt1.exists()){
            boolean flag = txt1.createNewFile();
            System.out.println(flag);
        }
    }
}

list()方法与listFiles()方法

获取一个目录中的所有文件或者目录中的文件夹,一个目录中可能有多个文件或者文件夹,那么如果File中有功能获取到一个目录中的所有文件和文件夹,那么功能得到的结果要么是数组,要么是集合。
在这里插入图片描述

/*
 *File类两个获取功能: 
 * String[] list():只获取当前文件夹下所有的文件或文件夹(不包含子文件夹下的内容) 
 *                 如果传入的是一个文件路径,直接返回null
 *              无论使用相对路径还是绝对路径,最终返回的字符串数组中存储的都是文件或文件夹名称
 *
 File[] listFiles():只获取当前文件夹下所有的文件或文件夹(不包含子文件夹下的内容) 
 *                 如果传入的是绝对路径,那么获取的该文件夹下的文件或目录也是绝对路径
 *                 如果传入的是相对路径,那么获取的该文件夹下的文件或目录也是相对路径
 *                 如果传入的是一个文件路径,直接返回null
 */

递归

递归概述

在这里插入图片描述

/*
 *递归:
 *  方法自身调用自身 
 *  递归容易出现的问题:Exception in thread "main" java.lang.StackOverflowError:栈内存溢出
 *  
 *  递归一般都有出口
 *  递归效率不高,因为入栈和弹栈消耗内存资源
 */
public class Demo {
	public static void main(String[] args) {
        method();
	}
	public static void method(){
		method();
	}
}

递归求阶乘

/*分别利用循环和递归求某一个数的阶乘
 * 0!=1
 * 1!=1
 * 2!=2*1=2
 * 3!=3*2*1=6    1*2*3
 *
 * 1!=1
 * 2!=2 * 1!
 * 3!=3 * 2!
 */
public class Demo {
   public static int getJieCheng1(int n){
        int sum=1;//累计求积的结果
        for(int i=1;i<=n;i++){
            sum=sum*i;//当n为3的时候:第一次循环sum=1*1
            //第二次循环:sum= 1 * 2=2
            //第三次循环:sum= 2 * 3=6
        }
        return sum;
    }

    public static int getJieCheng2(int n){
        if (n==0||n==1){
            return 1;
        }
        return n*getJieCheng2(n-1);
    }

    public static void main(String[] args) {
        System.out.println(getJieCheng1(4));
        System.out.println(getJieCheng2(4));
    }
}

在这里插入图片描述

递归显示文件目录中的所有文件名

import java.io.File;
public class Demo{
    public static void main(String[] args) {
        File otherFile = new File("G:\\Program Files (x86)");
        showFileName(otherFile);
    }
    public static void showFileName(File otherFile){
        File[] files = otherFile.listFiles();
        for (File file : files) {
            //文件输出文件名
            if (file.isFile()){
                System.out.println(file.getName());//文件夹
            }
            //如果是文件夹,遍历下面的文件
            if (file.isDirectory()){
               showFileName(file);
            }
        }
    }
}

递归显示文件目录中文件的所有路径

import java.io.File;
public class Demo {
    public static void main(String[] args) {
        printFilePath(new File("G:\\Program Files (x86)"));
    }
    //形参定义成file是为了利用File类中的方法
    public static void printFilePath(File dir){
        //1.获取传递过来的目录下的所有的文件或文件夹(不包含子目录下的文件或文件夹)
        File[] fileOrDirs = dir.listFiles();
        //2.遍历这个数组
        for (File f : fileOrDirs) {
            //3.判断当前的file对象是文件还是文件夹
            if(f.isFile()){//判断是文件我们就直接打印它的路径
                System.out.println(f);
            }else{//说明是文件夹
                //继续获取该文件夹下的内容,仍然是调用listFiles方法,循环遍历
                //跟我们上面的代码重复,或者说跟printFilePath功能相同,
                //所以重复调用自身
                printFilePath(f);
            }
        }
    }
}
好的,我可以为你介绍一下如何使用 Java 编写程序实现文件拷贝。 Java 提供了非常方便的 I/O 类来处理文件读写操作。文件拷贝的基本思路是读取源文件中的数据,然后将数据写入到目标文件中。下面是一个简单的文件拷贝程序示例: ```java import java.io.*; public class FileCopy { public static void main(String[] args) throws IOException { // 源文件路径 String srcFilePath = "C:/temp/source.txt"; // 目标文件路径 String destFilePath = "C:/temp/dest.txt"; // 创建输入流和输出流 FileInputStream fis = new FileInputStream(srcFilePath); FileOutputStream fos = new FileOutputStream(destFilePath); // 定义缓冲区,每次读取 1024 个字节 byte[] buffer = new byte[1024]; int len; // 循环读取源文件中的数据,并将数据写入到目标文件中 while ((len = fis.read(buffer)) != -1) { fos.write(buffer, 0, len); } // 关闭输入流和输出流 fis.close(); fos.close(); System.out.println("文件拷贝完成!"); } } ``` 在上面的示例中,我们首先定义了源文件路径和目标文件路径。然后创建了输入流和输出流,用于读取源文件和向目标文件写入数据。我们定义了一个缓冲区,每次从输入流中读取 1024 个字节,并将这些字节写入到输出流中。最后,我们关闭输入流和输出流,并输出一条完成信息。 需要注意的是,上面的代码中使用了 try-catch 语句来捕获可能出现的 IOException 异常。这是因为在文件读写过程中可能会出现异常,比如文件不存在、文件无法读取等等。为了保证程序的健壮性,我们需要使用 try-catch 语句来处理这些异常。 希望这个简单的示例可以帮助你了解如何使用 Java 编写文件拷贝程序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值