Java编程中最基础的文件和目录操作方法详解

 更新时间:2015年11月17日 08:46:50   作者:小李飞刀8  
这篇文章主要介绍了Java编程中最基础的文件和目录操作方法详解,是Java入门学习中的基础知识,需要的朋友可以参考下

文件操作

平常经常使用JAVA对文件进行读写等操作,这里汇总一下常用的文件操作。

1、创建文件

public static boolean createFile(String filePath){ 
  boolean result = false; 
  File file = new File(filePath); 
  if(!file.exists()){ 
    try { 
      result = file.createNewFile(); 
    } catch (IOException e) { 
      e.printStackTrace(); 
    } 
  } 
   
  return result; 
} 

2、创建文件夹

public static boolean createDirectory(String directory){ 
  boolean result = false; 
  File file = new File(directory); 
  if(!file.exists()){ 
    result = file.mkdirs(); 
  } 
   
  return result; 
} 

3、删除文件

public static boolean deleteFile(String filePath){ 
  boolean result = false; 
  File file = new File(filePath); 
  if(file.exists() && file.isFile()){ 
    result = file.delete(); 
  } 
   
  return result; 
} 

4、删除文件夹

递归删除文件夹下面的子文件和文件夹

public static void deleteDirectory(String filePath){ 
  File file = new File(filePath); 
  if(!file.exists()){ 
    return; 
  } 
   
  if(file.isFile()){ 
    file.delete(); 
  }else if(file.isDirectory()){ 
    File[] files = file.listFiles(); 
    for (File myfile : files) { 
      deleteDirectory(filePath + "/" + myfile.getName()); 
    } 
     
    file.delete(); 
  } 
} 

5、读文件

(1)以字节为单位读取文件,常用于读二进制文件,如图片、声音、影像等文件

public static String readFileByBytes(String filePath){ 
  File file = new File(filePath); 
  if(!file.exists() || !file.isFile()){ 
    return null; 
  } 
   
  StringBuffer content = new StringBuffer(); 
   
  try { 
    byte[] temp = new byte[1024]; 
    FileInputStream fileInputStream = new FileInputStream(file); 
    while(fileInputStream.read(temp) != -1){ 
      content.append(new String(temp)); 
      temp = new byte[1024]; 
    } 
     
    fileInputStream.close(); 
  } catch (FileNotFoundException e) { 
    e.printStackTrace(); 
  } catch (IOException e) { 
    e.printStackTrace(); 
  } 
   
  return content.toString(); 
} 

 (2)以字符为单位读取文件,常用于读文本,数字等类型的文件,支持读取中文

public static String readFileByChars(String filePath){ 
  File file = new File(filePath); 
  if(!file.exists() || !file.isFile()){ 
    return null; 
  } 
   
  StringBuffer content = new StringBuffer(); 
  try { 
    char[] temp = new char[1024]; 
    FileInputStream fileInputStream = new FileInputStream(file); 
    InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream, "GBK"); 
    while(inputStreamReader.read(temp) != -1){ 
      content.append(new String(temp)); 
      temp = new char[1024]; 
    } 
     
    fileInputStream.close(); 
    inputStreamReader.close(); 
  } catch (FileNotFoundException e) { 
    e.printStackTrace(); 
  } catch (IOException e) { 
    e.printStackTrace(); 
  } 
   
  return content.toString(); 
} 

(3)以行为单位读取文件,常用于读面向行的格式化文件

public static List<String> readFileByLines(String filePath){ 
  File file = new File(filePath); 
  if(!file.exists() || !file.isFile()){ 
    return null; 
  } 
   
  List<String> content = new ArrayList<String>(); 
  try { 
    FileInputStream fileInputStream = new FileInputStream(file); 
    InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream, "GBK"); 
    BufferedReader reader = new BufferedReader(inputStreamReader); 
    String lineContent = ""; 
    while ((lineContent = reader.readLine()) != null) { 
      content.add(lineContent); 
      System.out.println(lineContent); 
    } 
     
    fileInputStream.close(); 
    inputStreamReader.close(); 
    reader.close(); 
  } catch (FileNotFoundException e) { 
    e.printStackTrace(); 
  } catch (IOException e) { 
    e.printStackTrace(); 
  } 
   
  return content; 
} 

6、写文件

字符串写入文件的几个类中,FileWriter效率最高,BufferedOutputStream次之,FileOutputStream最差。

(1)通过FileOutputStream写入文件

public static void writeFileByFileOutputStream(String filePath, String content) throws IOException{ 
  File file = new File(filePath); 
  synchronized (file) { 
    FileOutputStream fos = new FileOutputStream(filePath); 
    fos.write(content.getBytes("GBK")); 
    fos.close(); 
  } 
} 

(2)通过BufferedOutputStream写入文件

public static void writeFileByBufferedOutputStream(String filePath, String content) throws IOException{ 
  File file = new File(filePath); 
  synchronized (file) { 
    BufferedOutputStream fos = new BufferedOutputStream(new FileOutputStream(filePath)); 
    fos.write(content.getBytes("GBK")); 
    fos.flush(); 
    fos.close(); 
  } 
} 

(3)通过FileWriter将字符串写入文件

public static void writeFileByFileWriter(String filePath, String content) throws IOException{ 
    File file = new File(filePath); 
    synchronized (file) { 
      FileWriter fw = new FileWriter(filePath); 
      fw.write(content); 
      fw.close(); 
    } 
  } 

目录操作
目录是一个文件可以包含其他文件和目录的列表。你想要在目录中列出可用文件列表,可以通过使用 File 对象创建目录,获得完整详细的能在 File 对象中调用的以及有关目录的方法列表。

创建目录
这里有两个有用的文件方法,能够创建目录:

mkdir( ) 方法创建了一个目录,成功返回 true ,创建失败返回 false。失败情况是指文件对象的路径已经存在了,或者无法创建目录,因为整个路径不存在。
mkdirs( ) 方法创建一个目录和它的上级目录。
以下示例创建 “/ tmp / user / java / bin” 目录:

import java.io.File;

public class CreateDir {
  public static void main(String args[]) {
   String dirname = "/tmp/user/java/bin";
   File d = new File(dirname);
   // Create directory now.
   d.mkdirs();
 }
}

编译并执行以上代码创建 “/ tmp /user/ java / bin”。

提示:Java 自动按 UNIX 和 Windows 约定来处理路径分隔符。如果在 Windows 版本的 Java 中使用正斜杠(/),仍然可以得到正确的路径。

目录列表
如下,你能够用 File 对象提供的 list() 方法来列出目录中所有可用的文件和目录

import java.io.File;

public class ReadDir {
  public static void main(String[] args) {

   File file = null;
   String[] paths;

   try{   
     // create new file object
     file = new File("/tmp");

     // array of files and directory
     paths = file.list();

     // for each name in the path array
     for(String path:paths)
     {
      // prints filename and directory name
      System.out.println(path);
     }
   }catch(Exception e){
     // if any error occurs
     e.printStackTrace();
   }
  }
}

基于你/ tmp目录下可用的目录和文件,将产生以下结果:

test1.txt
test2.txt
ReadDir.java
ReadDir.class

相关文章

  • Java实现顺序表和链表结构

    Java实现顺序表和链表结构

    大家好,本篇文章主要讲的是Java实现顺序表和链表结构,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下
    2022-02-02
  • Java详解聊天窗口的创建流程

    Java详解聊天窗口的创建流程

    这篇文章主要介绍了怎么用Java来创建一个聊天窗口,聊天软件我们经常要用,但是你有想过自己怎么去实现它吗,感兴趣的朋友跟随文章往下看看吧
    2022-04-04
  • 利用反射实现Excel和CSV 转换为Java对象功能

    利用反射实现Excel和CSV 转换为Java对象功能

    将Excel或CSV文件转换为Java对象(POJO)以及将Java对象转换为Excel或CSV文件可能是一个复杂的过程,但如果使用正确的工具和技术,这个过程就会变得十分简单,在本文中,我们将了解如何利用一个Java反射的库来实现这个功能,需要的朋友可以参考下
    2023-11-11
  • Windows下java、javaw、javaws以及jvm.dll等进程的区别

    Windows下java、javaw、javaws以及jvm.dll等进程的区别

    这篇文章主要介绍了Windows下java、javaw、javaws以及jvm.dll等进程的区别,本文分别讲解了它们的作用并给出代码实例,最后做出了区别总结,需要的朋友可以参考下
    2015-03-03
  • JavaAgent原理及实践分享

    JavaAgent原理及实践分享

    这篇文章主要介绍了JavaAgent原理及实践,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-04-04
  • Android中比较常见的Java super关键字

    Android中比较常见的Java super关键字

    这篇文章主要为大家介绍了Android中比较常见的Java super关键字,具有一定的学习参考价值,感兴趣的小伙伴们可以参考一下
    2016-01-01
  • java设计模式原型模式与享元模式调优系统性能详解

    java设计模式原型模式与享元模式调优系统性能详解

    这篇文章主要为大家介绍了java设计模式原型模式与享元模式调优系统性能方法详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-05-05
  • 带你了解Java的类和对象

    带你了解Java的类和对象

    下面小编就为大家带来一篇全面理解Java类和对象。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2021-09-09
  • 详解SpringMVC中的@RequestMapping注解

    详解SpringMVC中的@RequestMapping注解

    这篇文章主要介绍了SpringMVC中@RequestMapping注解,@RequestMapping注解是一个用来处理请求地址映射的注解,可用于映射一个请求或一个方法,可以用在类或方法上,需要的朋友可以参考下
    2023-07-07
  • 解决Java Calendar类set()方法的陷阱

    解决Java Calendar类set()方法的陷阱

    这篇文章主要介绍了解决Java Calendar类set()方法的陷阱,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-03-03

最新评论