java.io.File类操作

一、java.io.File类  

  String path="E:/222/aaa";//路径
  String path1="aaa.txt";
  File file=new File(path+"/"+path1);//创建一个路径对象
  
常用方法:
  boolean exists = file.exists();//判断路径是否存在
  if(exists){
    System.out.println("存在此路径");
  }else{
    System.out.println("不存在此路径");
    //如果E盘中有222这个文件就只要创建aaa这一级目录
    File mk1=new File(path);
    boolean mkdir = mk1.mkdir();//创建目录(一级)
    //如果E盘中没有222这个文件就只要创建/222/aaa这多级目录
    File mk2=new File(path);
    boolean mkdirs = mk2.mkdirs();//创建目录(多级)
  }
  boolean createNewFile = file.createNewFile();//在文件夹已经存在的情况下创建一个文件,返回是否创建成功如果文件夹不存在,得先创建文件夹路径
  boolean file2 = file.isFile();//判断路径是否是 文件
  boolean directory = file.isDirectory();//判断路径是否是 文件夹
  boolean delete = file.delete();//删除路径(目录删除时必须是空目录,也就是说不可以有文件存在,如果有文件存在得先删除文件路径再删除目录路径)
  //eg:
  File ff=new File("E:/222/aaaa/aaa.txt");
  boolean d2 = ff.delete();//先删aaa.txt文件
  File f=new File("E:/222/aaaa");
  boolean d1 = f.delete();//再删aaaa文件夹

  File parentFile = file.getParentFile();//返回路径的父路径 E:/222/aaa
  String name = file.getName();//返回路径指向的名称 aaa.txt

  File[] listRoots = File.listRoots();//列出所有磁盘目录
  File[] listFiles = file.listFiles();//列出所有子路径(子文件、子文件夹)
  String[] list = file.list();//列出所有子路径名称

  }
//特例:

1.一次性安全 删除目录
  static boolean deleteFile(File file){
    if(file.isDirectory()){
      for(File f : file.listFiles())
      deleteFile(f);
    }
    return file.delete();
  }

 2.批量修改文件、文件夹名

 1 package com.yf.test.controller;
 2 
 3 import java.io.File;
 4 import java.io.IOException;
 5 import java.sql.SQLException;
 6 
 7 public class MainClass {
 8 
 9     public static void main(String[] args) throws IOException, ClassNotFoundException, SQLException {
10         File file=new File("E:\collection\Note\1.class\no1\cc");
11         updateFileName(file);
12     }
13     static void updateFileName(File file) throws IOException{
14         if(file.isDirectory()){
15             for(File f:file.listFiles()){
16                 updateFileName(f);
17             }
18             String parent=file.getParent();//父路径(上一级路径)
19             String name=file.getName();//本文件名
20             System.out.print("	文件名原为:"+name);
21             name=name.replaceAll("爪哇", "java");
22             name=name.replaceAll("上海", "ShangHai");
23             System.out.println("===文件名改为"+name);
24             file.renameTo(new File(parent+"/"+name));//此外要写为 绝对路径名;绝对路径名=父路径(上一级路径)+"/"+本文件名
25         }else{
26             String parent=file.getParent();//父路径(上一级路径)
27             String name=file.getName();//本文件名
28             System.out.print("	文件名原为:"+name);
29             name=name.replaceAll("爪哇", "java");
30             name=name.replaceAll("上海", "ShangHai");
31             System.out.println("===文件名改为"+name);
32             file.renameTo(new File(parent+"/"+name));
33         }
34     }
35 }

二、其它常用方法

静态方法
  static File createTempFile(String prefix, String suffix) 在默认临时文件目录中创建一个空文件,使用给定前缀和后缀生成其名称。
  static File createTempFile(String prefix, String suffix, File directory) 在指定目录中创建一个新的空文件,使用给定的前缀和后缀字符串生成其名称。
  static File[] listRoots() 列出可用的文件系统根。

实例方法
  boolean canExecute() 测试应用程序是否可以执行此抽象路径名表示的文件。
  boolean canRead() 测试应用程序是否可以读取此抽象路径名表示的文件。
  boolean canWrite() 测试应用程序是否可以修改此抽象路径名表示的文件。
  boolean createNewFile() 当且仅当不存在具有此抽象路径名指定名称的文件时,不可分地创建一个新的空文件。

  boolean exists() 测试此抽象路径名表示的文件或目录是否存在。
  boolean isDirectory() 测试此抽象路径名表示的文件是否是一个目录。
  boolean isFile() 测试此抽象路径名表示的文件是否是一个标准文件。
  boolean isHidden() 测试此抽象路径名指定的文件是否是一个隐藏文件。
  boolean isAbsolute() 测试此抽象路径名是否为绝对路径名。

  boolean mkdir() 创建此抽象路径名指定的目录。
  boolean mkdirs() 创建此抽象路径名指定的目录,包括所有必需但不存在的父目录。

  boolean renameTo(File dest) 重新命名此抽象路径名表示的文件。

  boolean delete() 删除此抽象路径名表示的文件或目录。
  void deleteOnExit() 在虚拟机终止时,请求删除此抽象路径名表示的文件或目录。

  String getName() 返回由此抽象路径名表示的文件或目录的名称。
  String getPath() 将此抽象路径名转换为一个路径名字符串。

  File getAbsoluteFile() 返回此抽象路径名的绝对路径名形式。
  String getAbsolutePath()返回此抽象路径名的绝对路径名字符串。

  long getFreeSpace() 返回此抽象路径名指定的分区中未分配的字节数。
  long getTotalSpace() 返回此抽象路径名指定的分区大小。

  String getParent() 返回此抽象路径名父目录的路径名字符串;如果此路径名没有指定父目录,则返回 null。
  File getParentFile() 返回此抽象路径名父目录的抽象路径名;如果此路径名没有指定父目录,则返回 null。
  long lastModified() 返回此抽象路径名表示的文件最后一次被修改的时间。
  long length() 返回由此抽象路径名表示的文件的长度。
  String[] list() 返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中的文件和目录。
  String[] list(FilenameFilter filter)返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中满足指定过滤器的文件和目录。
  File[] listFiles() 返回一个抽象路径名数组,这些路径名表示此抽象路径名表示的目录中的文件。
  File[] listFiles(FileFilter filter)返回抽象路径名数组,这些路径名表示此抽象路径名表示的目录中满足指定过滤器的文件和目录。
  File[] listFiles(FilenameFilter filter)返回抽象路径名数组,这些路径名表示此抽象路径名表示的目录中满足指定过滤器的文件和目录。

  boolean setExecutable(boolean executable) 设置此抽象路径名所有者执行权限的一个便捷方法。
  boolean setExecutable(boolean executable, boolean ownerOnly)设置此抽象路径名的所有者或所有用户的执行权限。
  boolean setReadable(boolean readable) 设置此抽象路径名所有者读权限的一个便捷方法。
  boolean setReadable(boolean readable, boolean ownerOnly) 设置此抽象路径名的所有者或所有用户的读权限。
  boolean setWritable(boolean writable) 设置此抽象路径名所有者写权限的一个便捷方法。
  boolean setWritable(boolean writable, boolean ownerOnly) 设置此抽象路径名的所有者或所有用户的写权限。

  boolean setLastModified(long time) 设置此抽象路径名指定的文件或目录的最后一次修改时间。
  boolean setReadOnly() 标记此抽象路径名指定的文件或目录,从而只能对其进行读操作。

三、文件内容操作(输入输出流)InputStream/OutputStream和Reader/Writer

1.字节流:

  InputStream 输入流:将文件数据从文件 读取到 程序 中

  读取二进制数据 byte[]

  文件输入流:FileInputStream 类

  构造方法:

    FileInputStream(String path);
    FileInputStream(File file);

    int  read(byte [])

  OutputStream 输出流:将数据从 程序 写到文件 中

  将byte[]数组写到文件中

  文件输出流:FileOutputStream类

    FileOutputStream(String path);

    FileOutputStream(File filt);

    void write(byte[] b);

eg:

  File file=new File("E:/222/aaaa/aaa.txt");

  //文件中的内容为:读取的数据为:这是一个文件夹

             文件夹第1行
             文件夹第2行
             文件夹第3行

  //读取
  InputStream is=new FileInputStream(file);
  byte[] bs=new byte[53];//创建字节数据来存储数据,

  //一个字符=2个字节,一个数字=1个字节,一个回车=2个字节
  int count = is.read(bs);//已将数据读取到时程序中,返回文件中的字节大小
  String msg=new String(bs);
  is.close();
  //修改好后 写出
  OutputStream os=new FileOutputStream(file);
  byte[] bs1=new byte[0];//不用标长度都可以,strIn.toCharArray();的时候会自动调整的
  //String s=new String(msg+"你好");
  msg+="你好1";//把文件中的内容新增“你好”
  bs1=msg.getBytes();
  os.write(bs1);
  os.close();

  //修改后的内容为:这是一个文件夹

             文件夹第1行
             文件夹第2行
             文件夹第3行你好1

2.字符流:只可以操作字符串

   Reader字符输入流:

  文件输入流:FileReader

    FileReader(file)

  Writer字符输出流:

  文件输出流:FileWriter

    FileWriter(file);

eg: 

  //文件中的内容为:这是一个文件夹

             文件夹第1行
             文件夹第2行
             文件夹第3行你好1

  File file=new File("E:/222/aaaa/aaa.txt");
  //读取
  Reader reader=new FileReader(file);
  char [] readerChar=new char[58];
  int count=reader.read(readerChar);//返回文件中的字节大小(单位byte)
  reader.close();
  String strIn=new String(readerChar);
  
  Writer writer=new FileWriter(file);
  char [] writerChar=new char[0];//不用标长度都可以,strIn.toCharArray();的时候会自动调整的
  strIn=strIn.substring(0,strIn.lastIndexOf('你'));
  writerChar=strIn.toCharArray();
  writer.write(writerChar);
  writer.close();

  //修改后的内容为:这是一个文件夹

             文件夹第1行
             文件夹第2行
             文件夹第3行

3.在Reader的基础上建一个缓冲器:

  File file=new File("E:/a.txt");
  Reader reader=new FileReader(file);
  BufferedReader br=new BufferedReader(reader);
  String line=null;
  while((line=br.readLine())!=null){
    System.out.println(line);//会一行一行地输出文件中的数据
  }
  br.close();
  reader.close();
  System.out.println(line);//缓冲器关了,不会有缓存,最后line为null;

  还有:BufferedInputStream、BufferedOutputStream、BufferedWriter等许多缓冲器

原文地址:https://www.cnblogs.com/janesyf/p/7843180.html