Java 本地文件操作

File类简介

  • File 类用来代表文件或文件夹,通过 File 类,可以对文件与文件夹进行丰富的操作,并且可以获取文件的路径、大小、文件名等信息。

文件的创建、删除、重命名

  • 通过文件类的 createNewFile() 方法创建文件
  • 通过 delete() 方法删除文件
  • 使用 renameTo() 方法重命名文件,renameTo() 方法时依靠另一个 File 对象来重命名。
public class FileTest {

    public static void main(String[] args) {
        // 创建文件对象
        File file = new File("Hello File.txt");
        File file2 = new File("newHello.txt");
        try {
            file.createNewFile();  //创建文件
            System.out.println("创建文件成功");
        } catch (IOException e) {
            System.out.println("创建文件失败");
        }
        file.renameTo(file2);  //文件重命名
    }
}

文件夹的创建、删除、重命名

  • 通过 mkdir() 与 mkdirs() 方法创建文件夹:如果想创建一层接着又一层的文件夹,则用 mkdirs() 方法,自动补全中间的文件夹。
  • 通过 delete() 方法删除文件夹
  • 使用 renameTo() 方法对文件夹重命名
public class FileTest {

    public static void main(String[] args) {
        // 创建文件夹对象
        File floder = new File("Hello floder");
        File floder1 = new File("new floder/one/two/three/main");
        File floder2 = new File("new Hello fioder");
        if(floder.mkdir()){  
            //mkdir() 方法返回的是boolean类型值,所以可以做判断是否创建成功
            System.out.println("文件夹创建成功");
        }else if(floder.exists()){
            //exists()方法为判断是否存在当前文件夹,返回bollean值类型
            System.out.println("文件夹以存在,不用创建");
        }else {
            System.out.println("创建文件夹失败");
        }
         // mkdirs()方法自动完成one two three main 文件夹的创建
        floder1.mkdirs(); 
        floder.renameTo(floder2);//重命名文件夹
        //floder.delete(); //删除该文件夹
        
    }    
}

文件属性的读取

  • exists() 方法判断文件是否存在
  • getName() 方法读取文件名称
  • getPath() 方法读取文件路径
  • getAbsolutePath() 方法读取文件的绝对路径
  • getParent() 方法读取父级路径
  • length() 方法读取文件大小
  • isHidden() 方法读取文件是否被隐藏
  • canRead() 方法判断文件是否可读
  • canWrite() 方法判断文件是否可写
  • isDirectory() 方法判断文件是否为文件夹
public class FileTest2 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        File file = new File("floder/Hello.txt");
        
        //判断文件是否存在
        System.out.println("文件是否存在:"+file.exists());
        //读取文件名称
        System.out.println("文件的名称 :"+file.getName());
        //读取文件路径
        System.out.println("文件的路径:"+file.getPath());
        //读取文件绝对路径
        System.out.println("文件的绝对路径:"+file.getAbsolutePath());
        //读取文件父级路径
        System.out.println("文件的父级路径:"+file.getParent());
        //读取文件大小
        System.out.println("文件的大小:"+file.length());
        //判断文件是否被隐藏
        System.out.println("文件是否被隐藏:"+file.isHidden());
        //判断文件是否可读
        System.out.println("文件是否可读:"+file.canRead());
        //判断文件是否可写
        System.out.println("文件是否可写:"+file.canWrite());
        //判断文件是否为文件夹
        System.out.println("判断是否为文件夹:"+file.isDirectory());
    }
}

文件属性的设置

  • setWritable() 方法设置文件是否可写
  • setReadable() 方法设置文件是否可读
  • setReadOnly() 方法设置文件只读
public class FileReadWrite {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        File file = new File("floder/Hello.txt");
        //设置文件可写
            file.setWritable(true);
        //设置文件可读
            file.setReadable(true);
        //设置文件为只读
            file.setReadOnly();
    }

遍历文件夹

  • 通过使用 listFile() 方法获取文件夹中的所有项目,包括文件和文件夹。查看 listFile() 方法可以发现其返回的是一个文件类型的数组。
  • 以下例子将利用递归思想实现文件夹的遍历
public class FileScaner {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        
        scanerFile(new File("E:/study_Java"),1);
    }
    public static void  scanerFile(File dir,int tab) {
        if (dir.isDirectory()) {//判断是否为文件夹
            //将该文件夹下所有的文件及文件夹存入数组中
        File nextDir[]= dir.listFiles(); 
        for (int i = 0; i < nextDir.length; i++) {
            // 这个for循环为了增强输出格式的可读性
            for (int j = 0; j < tab; j++) {
                System.out.print("|--");
            }
            //输出文件及文件夹名
            System.out.println(nextDir[i].getName());
            if (nextDir[i].isDirectory()) {
                //如果为文件夹,则递归调用sannerFile
                scanerFile(nextDir[i],tab+1);
            }
        }
        }
    }
}

文件的简单读写

  • I/O 流中有文件的输入输出类
  • FileInputStream 继承 InputStream,可以通过其创建文件字节输入流; FileOutputStream 继承 OutputStream,可以通过其创建文件字节输出流
  • 通过 InputStreamReader 类创建字符输入流;通过 OutputStreamReader 类创建字符输出流
  • 通过 BufferReader 类创建数据缓冲流,再使用 readLine() 方法获取缓冲流的数据
  • 具体实现分析一下代码
public class ReadWriteTextFile {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        readFile(new File("floder/Hello.txt"));
        writeFile(new File("floder/HelloWrite"));
    }

    public static void readFile(File file) {
        
        try {
            //创建文件字节输入流
            FileInputStream fis = new FileInputStream(file);
            //创建字符输入流
            InputStreamReader isr = new InputStreamReader(fis, "UTF-8");
            //创建缓冲流
            BufferedReader br = new BufferedReader(isr);
            
            String line ;
            while ((line = br.readLine()) != null) {
                System.out.println(line);
            }
            br.close();
            isr.close();
            fis.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }    
    }
    
    public static void writeFile (File file) {
        try {
            //创建文件输出流
            FileOutputStream fos = new FileOutputStream(file);
            //创建字符输出流
            OutputStreamWriter osw = new OutputStreamWriter(fos,"UTF-8");
            //创建输出缓冲流
            BufferedWriter bw = new BufferedWriter(osw);
            
            osw.write("宣州谢朓楼饯别校书叔云\n");
            osw.write("弃我去者,昨日之日不可留;\n");
            osw.write("乱我心者,今日之日多烦忧。\n");
            osw.close();
            osw.close();
            fos.close();
            
         } catch (FileNotFoundException e) {
            e.printStackTrace();
         } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
         } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

你可能感兴趣的:(Java 本地文件操作)