java IO举例说明1

来源:互联网 发布:域名怎么看 编辑:程序博客网 时间:2024/06/05 19:40

例如1:

package Chapter07.file;

import java.io.File;

public class FileDemo_01 {
 public static void main(String[] args) {
  File file = new File("D:\\temp\\keytoolcmd.txt");    // 根据指定的路径创建一个File对象
  System.out.println("文件名为:" + file.getName());   // 获取该File对象的名字
  System.out.println("绝对路径为:" + file.getAbsolutePath()); // 获取该File对象的绝对路径
  System.out.println("路径为:" + file.getPath());    // 获取该File对象的相对路径
  System.out.println("所属磁盘目录为:" + file.getParent()); //获取该File对象的目录
  if (!file.exists()) {
   file.mkdir();
  }
  System.out.println("此路径名表示的文件是一个目录吗?:" + file.isDirectory());// 判断该File对象是不是目录
  System.out.println("它是处于可读状态吗?:" + file.canRead());  // 判断该File对象是否可读
  System.out.println("它是处于可写状态吗?" + file.canWrite());   // 判断该File对象是否可写
  System.out.println("该文件长度为:" + file.length() + "字节");  // 获取该File对象中的字符长度
  System.out.println("此文件最后修改的时间为:" + file.lastModified());// 获取该File对象最后修改时间
 }
}

例如2:

package Chapter07.file;

import java.io.File;
import java.io.FilenameFilter;

public class FileDemo_02 {
 static class MyFilenameFilter implements FilenameFilter {
  private String sf = "";      // 定义文件的后缀名
  public MyFilenameFilter(String surfix) {  // 用构造方法为sf变量赋值
   this.sf = surfix;
  }
  public boolean accept(File dir, String name) { // 重写FilenameFilter接口中的accept方法,判断指定的文件是否在指定的目录中
   if (new File(dir, name).isFile()) {   // 如果当前的File对象是一个文件,则返回它是否以指定的后缀结束,是返回true
    return name.endsWith(sf);
   } else {
    // 如果是文件夹,则直接返回true
    return true;
   }
  }
 }
 public static void getAllFiles(String dirName) {  // 列出指定目录下所有文件和子目录的路径
  // 如果dir不以文件分隔符结尾,自动添加文件分隔符。
  if (!dirName.endsWith(File.separator)) {
   dirName = dirName + File.separator;
  }
  File dirFile = new File(dirName);
  // 如果dir对应的文件不存在,或者不是一个文件夹,则退出
  if (!dirFile.exists() || (!dirFile.isDirectory())) {
   System.out.println("失败!找不到指定的目录:" + dirName);
   return;
  }
  // 列出源文件夹下所有文件(包括子目录)
  File[] fileArray = dirFile.listFiles();
  for (int i = 0; i < fileArray.length; i++) {
   if (fileArray[i].isFile()) {
    System.out.print(fileArray[i].getAbsolutePath() + "      ");
   } else if (fileArray[i].isDirectory()) {
    System.out.println(fileArray[i].getAbsolutePath() + "      ");
    FileDemo_02.getAllFiles(fileArray[i].getAbsolutePath());
   }
   if ((i + 1) % 2 == 0)
    System.out.println();
  }
 }
 public static void getFilesByFilter(FilenameFilter filter,// 获取在指定目录下符合指定后缀文件名的所有文件
   String dir_Path) {
  if (!dir_Path.endsWith(File.separator)) {// 如果目录路径不是以文件分隔符结尾则自动添加文件分隔符。
   dir_Path = dir_Path + File.separator;
  }
  File dir_File = new File(dir_Path);
  if (!dir_File.exists() || (!dir_File.isDirectory())) {// 如果指定的目录不存在或不是一个目录则返回
   System.out.println("失败!找不到指定目录:" + dir_Path);
   return;
  }
  // 列出指定目录下的所有符合过滤器条件的文件(包括子目录)
  File[] fileArray = dir_File.listFiles(filter);
  for (int i = 0; i < fileArray.length; i++) {
   if (fileArray[i].isFile()) {
    System.out.println(fileArray[i].getAbsolutePath() + " 是文件!");
   } else if (fileArray[i].isDirectory()) {
    System.out.println(fileArray[i].getAbsolutePath() + " 是目录!");
    FileDemo_02.getFilesByFilter(filter, fileArray[i]
      .getAbsolutePath());
   }
  }
 }
 public static void main(String[] args) {
  String dir = "D:\\temp";
  System.out.println((dir + "目录下的内容: "));
  FileDemo_02.getAllFiles(dir);
  System.out.println();
  System.out.println("符合过滤器条件的文件如下:");
  // 新建一个文件名过滤器。参数为".txt"
  FilenameFilter myFilenameFilter = new FileDemo_02.MyFilenameFilter(
    ".txt");
  FileDemo_02.getFilesByFilter(myFilenameFilter, dir);
 }
}

例如3:

package Chapter07.file;

import java.io.File;
import java.io.IOException;

public class FileDemo_03 {
 // 此方法的主要作用是判断创建文件是否成功,如果成功则返回true否则返回false
 public static boolean createFile(String destFileName) {
  File file = new File(destFileName); // 根据指定的文件名创建File对象
  if (file.exists()) {     // 判断该文件是否存在
   System.out.println("创建单个文件" + destFileName + "失败,目标文件已存在!");
   return false;    // 如果存在,则不需创建则返回fasle
  }
  if (destFileName.endsWith(File.separator)) {// 如果传入的文件名是以文件分隔符结尾的,则说明此File对象是个目录而不是文件
   System.out.println("创建单个文件" + destFileName + "失败,目标文件不能为目录!");
   return false;// 因为不是文件所以不可能创建成功,则返回false
  }
  // 判断目标文件所在的目录是否存在
  if (!file.getParentFile().exists()) {
   // 如果目标文件所在的文件夹不存在,则创建父文件夹
   System.out.println("创建" + file.getName() + "所在目录不存在,正在创建!");
   if (!file.getParentFile().mkdirs()) {// 判断父文件夹是否存在,如果存在则表示创建成功否则不成功
    System.out.println("创建目标文件所在的目录失败!");
    return false;
   }
  }
  // 创建目标文件
  try {
   if (file.createNewFile()) {// 调用createNewFile方法,判断创建指定文件是否成功
    System.out.println("创建单个文件" + destFileName + "成功!");
    return true;
   } else {
    System.out.println("创建单个文件" + destFileName + "失败!");
    return false;
   }
  } catch (IOException e) {
   e.printStackTrace();
   System.out.println("创建文件" + destFileName + "失败!" + e.getMessage());
   return false;
  }
 }
 public static void main(String[] args) {
  // 创建目录
  String dirName = "D:/temp/aa";
  // 创建文件
  String fileName = dirName + "/bb/ccFile.txt";
  FileDemo_03.createFile(fileName);
 }
}

例如4:

package Chapter07.file;

import java.io.File;
import java.io.IOException;

public class FileDemo_04 {
 public static boolean createDirectory(String destDirName) {// 判断目录是否创建成功,成功则返回true,否则返回false
  File dir = new File(destDirName);// 创建一个File对象
  if (dir.exists()) {// 判断该目录是否存在,存在则返回false
   return false;
  }
  if (!destDirName.endsWith(File.separator)) {// 为了方便获得其目录下的文件的路径,如果该目录路径不是文件分隔符结尾的,则给其加上文件分隔符
   destDirName = destDirName + File.separator;
  }
  // 创建目标目录
  if (dir.mkdirs()) {
   System.out.println("指定目录不存在,创建目录" + destDirName + "成功!");
   return true;
  } else {
   System.out.println("创建目录" + destDirName + "失败!");
   return false;
  }
 }
 public static String createFiles(String fileName, String suffix,
   String dirName) {// 根据传入的文件名的前缀和扩展名在指定的目录下创建文件
  File tempFile = null;
  if (dirName == null) {
   try {
    // 在默认文件夹下创建临时文件
    tempFile = File.createTempFile(fileName, suffix);
    // 返回临时文件的路径
    return tempFile.getCanonicalPath();
   } catch (IOException e) {
    e.printStackTrace();
    System.out.println("创建临时文件失败!" + e.getMessage());
    return null;
   }
  } else {
   File dir = new File(dirName);
   // 如果临时文件所在目录不存在,首先创建目录
   if (!dir.exists()) {
    if (FileDemo_04.createDirectory(dirName)) {
     System.out.println("创建临时文件失败,不能创建临时文件所在的目录!");
     return null;
    }
   }
   try {
    // 在指定目录下创建指定的文件
    tempFile = File.createTempFile(fileName, suffix, dir);
    return tempFile.getCanonicalPath();
   } catch (IOException e) {
    e.printStackTrace();
    System.out.println("创建临时文件失败!" + e.getMessage());
    return null;
   }
  }
 }
 public static void main(String[] args) {
  String[] surfix = { ".txt", ".jpg", ".doc", ".excel", ".java", ".html",null,"" };
  // 创建目录
  String dirName = "D:\\temp\\temp1";
  FileDemo_04.createDirectory(dirName);
  // 创建临时文件
  String fileName = "temp";
  for (int i = 0; i < surfix.length; i++) {
   System.out.println("成功创建了临时文件: "
     + FileDemo_04.createFiles(fileName, surfix[i], dirName));
  }
 }
}

例如5:

package Chapter07.file;

import java.io.File;

public class FileDemo_05 {
 // 判断删除指定的文件或文件夹是否成功,成功则返回true否则返回false
 public static boolean deleteAnyone(String fileName) {
  File file = new File(fileName);
  if (!file.exists()) {
   System.out.println("文件删除失败:" + fileName + "文件不存在!");
   return false;
  } else {
   if (file.isFile()) {
    return FileDemo_05.deleteFiles(fileName);
   } else {
    return FileDemo_05.deleteDir(fileName);
   }
  }
 }
 // 判断删除指定的文件是否成功,成功则返回true否则返回false
 public static boolean deleteFiles(String fileName) {
  File file = new File(fileName);
  // 如果文件路径对应的文件存在,并且是一个文件,则直接删除。
  if (file.exists() && file.isFile()) {
   if (file.delete()) {
    System.out.println("文件:" + fileName + "删除成功!");
    return true;
   } else {
    System.out.println("文件" + fileName + "删除失败!");
    return false;
   }
  } else {
   System.out.println("文件删除失败:" + fileName + "文件不存在!");
   return false;
  }
 }
 // 判断删除指定的目录(文件夹)以及目录下的文件是否成功,成功则返回true否则返回false
 public static boolean deleteDir(String dir) {
  // 如果dir不以文件分隔符结尾,自动添加文件分隔符。
  if (!dir.endsWith(File.separator)) {
   dir = dir + File.separator;
  }
  File dirFile = new File(dir);
  // 如果dir表示的文件不存在,或者不是一个文件夹,则退出
  if (!dirFile.exists() || (!dirFile.isDirectory())) {
   System.out.println("目录删除失败:" + dir + "目录不存在!");
   return false;
  }
  boolean flag = true;
  // 删除指定目录下所有文件(包括子目录)
  File[] files = dirFile.listFiles();
  for (int i = 0; i < files.length; i++) {
   // 删除文件
   if (files[i].isFile()) {
    flag = FileDemo_05.deleteFiles(files[i].getAbsolutePath());
    if (!flag) {
     break;
    }
   }
   // 删除子目录
   else if (files[i].isDirectory()) {
    flag = FileDemo_05.deleteDir(files[i].getAbsolutePath());
    if (!flag) {
     break;
    }
   }
  }
  if (!flag) {
   System.out.println("删除目录失败!");
   return false;
  }
  // 删除当前目录
  if (dirFile.delete()) {
   System.out.println("目录:" + dir + "删除成功!");
   return true;
  } else {
   return false;
  }
 }
 public static void main(String[] args) {
  // 删除文件
  System.out.println("调用deleteFiles方法的结果如下:");
  String file = "D:\\temp\\aa\\bb\\ccFile.txt";
  FileDemo_05.deleteFiles(file);
  System.out.println();
  // 删除目录
  System.out.println("调用deleteDir方法的结果如下:");
  String dir = "D:\\temp\\key";
  FileDemo_05.deleteDir(dir);
  System.out.println();
  // 删除文件或目录
  System.out.println("调用deleteAnyone方法的结果如下:");
  dir = "D:\\temp\\read";
  FileDemo_05.deleteAnyone(dir);
 }
}

例如6:

package Chapter07.file;

import java.io.File;

public class FileDemo_06 {
 // 移动某个指定的文件,但移动成功后不会覆盖已存在的目标文件
 public static boolean moveA_File(String sourceFileName,
   String targetFileName) {
  return FileDemo_06.moveA_File(sourceFileName, targetFileName, false);
 }
 // 移动某个指定的文件,但移动成功后可以根据isOverlay的值来决定是否覆盖已存在的目标文件
 public static boolean moveA_File(String sourceFileName,
   String targetFileName, boolean isOverlay) {
  // 判断原文件是否存在
  File sourceFile = new File(sourceFileName);
  if (!sourceFile.exists()) {
   System.out.println("移动文件失败:原文件" + sourceFileName + "不存在!");
   return false;
  } else if (!sourceFile.isFile()) {
   System.out.println("移动文件失败:" + sourceFileName + "不是一个文件!");
   return false;
  }
  File targetFile = new File(targetFileName);
  if (targetFile.exists()) {// 判断目标文件是否存在
   if (isOverlay) {// 如果目标文件存在,是否允许覆盖目标文件
    // 删除已存在的目标文件,无论目标文件是目录还是单个文件
    System.out.println("该文件已存在,准备删除它!");
    if (!FileDemo_05.deleteAnyone(targetFileName)) {
     System.out.println("文件移动失败,删除文件" + targetFileName + "失败!");
     return false;
    }
   } else {
    System.out.println("文件移动失败,文件" + targetFileName + "已存在!");
    return false;
   }
  } else {
   if (!targetFile.getParentFile().exists()) {
    // 如果目标文件所在的目录不存在,则创建目录
    System.out.println("该文件所在目录不存在,正在创建!");
    if (!targetFile.getParentFile().mkdirs()) {
     System.out.println("移动文件失败,创建文件所在的目录失败!");
     return false;
    }
   }
  }
  // 移动原文件至目标文件
  if (sourceFile.renameTo(targetFile)) {
   System.out.println("移动文件" + sourceFileName + "到" + targetFileName
     + "成功!");
   return true;
  } else {
   System.out.println("移动文件" + sourceFileName + "到" + targetFileName
     + "失败!");
   return true;
  }
 }
 public static boolean moveDir(String sourceDirName, String targetDirName) {
  // 默认为不覆盖目标文件
  return FileDemo_06.moveDir(sourceDirName, targetDirName, false);
 }
 // 移动某个指定的目录,但移动成功后可以根据isOverlay的值来决定是否覆盖当前已存在的目标目录
 public static boolean moveDir(String sourceDirName, String targetDirName,
   boolean isOverlay) {
  // 判断原目录是否存在
  File sourceDir = new File(sourceDirName);
  if (!sourceDir.exists()) {
   System.out.println("移动目录失败,原始目录" + sourceDirName + "不存在!");
   return false;
  } else if (!sourceDir.isDirectory()) {
   System.out.println("移动目录失败," + sourceDirName + "不是一个目录!");
   return false;
  }
  // 如果目标文件夹名不以文件分隔符结尾,自动添加文件分隔符
  if (!targetDirName.endsWith(File.separator)) {
   targetDirName = targetDirName + File.separator;
  }
  File targetDir = new File(targetDirName);
  // 如果目标文件夹存在,
  if (targetDir.exists()) {
   if (isOverlay) {
    // 允许覆盖则删除已存在的目标目录
    System.out.println("该目录已存在,准备删除它!");
    if (!FileDemo_05.deleteAnyone(targetDirName)) {
     System.out.println("移动目录失败:删除目录" + targetDirName + "失败!");
    }
   } else {
    System.out.println("移动目录失败:该目录" + targetDirName + "已存在!");
    return false;
   }
  } else {
   // 创建目标目录
   System.out.println("该目录不存在,正在创建!");
   if (!targetDir.mkdirs()) {
    System.out.println("移动目录失败:创建该目录失败!");
    return false;
   }
  }
  boolean flag = true;
  // 移动原目录下的文件和子目录到目标目录下
  File[] files = sourceDir.listFiles();
  for (int i = 0; i < files.length; i++) {
   // 移动子文件
   if (files[i].isFile()) {
    flag = FileDemo_06.moveA_File(files[i].getAbsolutePath(),
      targetDirName + files[i].getName(), isOverlay);
    if (!flag) {
     break;
    }
   }
   // 移动子目录
   else if (files[i].isDirectory()) {
    flag = FileDemo_06.moveDir(files[i].getAbsolutePath(),
      targetDirName + files[i].getName(), isOverlay);
    if (!flag) {
     break;
    }
   }
  }
  if (!flag) {
   System.out.println("目录" + sourceDirName + "移动到" + targetDirName
     + "失败!");
   return false;
  }
  // 删除原目录
  if (FileDemo_05.deleteDir(sourceDirName)) {
   System.out.println("目录" + sourceDirName + "移动到" + targetDirName
     + "成功!");
   return true;
  } else {
   System.out.println("目录" + sourceDirName + "移动到" + targetDirName
     + "失败!");
   return false;
  }
 }
 public static void main(String[] args) {
  // 移动文件,如果目标文件存在,则替换
  System.out.println("调用moveA_File方法的结果如下:");
  String sourceFileName = "D:\\temp\\keytoolcmd.txt";
  String targetFileName = "D:\\test\\temp\\keytoolcmd.txt.";
  FileDemo_06.moveA_File(sourceFileName, targetFileName, true);
  // 移动目录,如果目标目录存在,则不覆盖
  System.out.println("\n调用moveDir方法的结果如下:");
  String sourceDirName = "D:\\temp\\aa";
  String targetDirName = "F:\\abc";
  FileDemo_06.moveDir(sourceDirName, targetDirName);
 }
}

例如7:

package Chapter07.file;

import java.io.File;
import java.util.LinkedList;
import java.util.List;

public class FileDemo_07 {
 // 查找符合条件的文件,并返回一个文件名列表
 public static List findFiles(String baseDirName, String targetFileName,
   int count) {
  LinkedList fileList = new LinkedList();   // 创建一个连接列表fileList
  File baseDir = new File(baseDirName);  // 创建一个File对象
  if (!baseDir.exists() || !baseDir.isDirectory()) { // 判断目录是否存在
   System.out.println("文件查找失败:" + baseDirName + "不是一个目录!");
   return fileList;
  }
  String tempName = null;
  fileList.addLast(baseDir);// 将File对象添加到fileList列表中
  File tempFile = null;
  while (!fileList.isEmpty()) {
   // 从队列中取目录
   tempFile = (File) fileList.removeFirst();// 将列表中的第一个元素取出并删除
   if (tempFile.exists() && tempFile.isDirectory()) {
    File[] files = tempFile.listFiles();
    for (int i = 0; i < files.length; i++) {
     // 如果是目录则放进队列
     if (files[i].isDirectory()) {
      fileList.add(files[i]);
     } else {
      // 如果是文件则根据文件名与目标文件名进行匹配
      tempName = files[i].getName();
      if (FileDemo_07.matchWord(targetFileName, tempName)) {
       // 匹配成功,将文件名添加到结果集
       fileList.add(files[i].getAbsoluteFile());
       // 如果已经达到指定的数目,则退出循环
       if ((count != 0) && (fileList.size() >= count)) {
        return fileList;
       }
      }
     }
    }
   }
  }
  return fileList;
 }
 // 文件名的通配符匹配,如果匹配成功则返回true,否则返回false
 private static boolean matchWord(String pattern, String str) {
  int patternLength = pattern.length();
  int strLength = str.length();
  int strIndex = 0;
  char ch;
  for (int patternIndex = 0; patternIndex < patternLength; patternIndex++) {
   ch = pattern.charAt(patternIndex);
   if (ch == '*') {
    // 通配符星号*表示可以匹配任意多个字符
    while (strIndex < strLength) {
     if (matchWord(pattern.substring(patternIndex + 1), str
       .substring(strIndex))) {
      return true;
     }
     strIndex++;
    }
   } else if (ch == '?') {
    // 通配符问号?表示匹配任意一个字符
    strIndex++;
    if (strIndex > strLength) {
     // 表示str中已经没有字符匹配?了。
     return false;
    }
   } else {
    if ((strIndex >= strLength) || (ch != str.charAt(strIndex))) {
     return false;
    }
    strIndex++;
   }
  }
  return (strIndex == strLength);
 }
 public static void main(String[] paramert) {
  String baseDIR = "D:/temp"; // 在此目录中找文件
  String txtName = "*.txt"; // 找扩展名为txt的文件
  int countNumber = 3; // 最多返回3个文件
  System.out.println("在D盘的temp目录下查找扩展名为" + txtName + "的文件如下:");
  List txtList = FileDemo_07.findFiles(baseDIR, txtName, countNumber);
  if (txtList.size() == 0) {
   System.out.println("No File Fount.");
  } else {
   for (int i = 0; i < txtList.size(); i++) {
    System.out.println(txtList.get(i));// 显示查找结果。
   }
  }
  String docName = "*.doc"; // 找扩展名为doc的文件
  System.out.println("在D盘的temp目录下查找扩展名为" + docName + "的文件如下:");
  List docList = FileDemo_07.findFiles(baseDIR, docName, 2);
  if (docList.size() == 0) {
   System.out.println("No File Fount.");
  } else {
   for (int i = 0; i < docList.size(); i++) {
    System.out.println(docList.get(i));// 显示查找结果。
   }
  }
  String jpgName = "*.jpg"; // 找扩展名为jpg的文件
  System.out.println("在D盘的temp目录下查找扩展名为" + jpgName + "的文件如下:");
  List jpgList = FileDemo_07.findFiles(baseDIR, jpgName, countNumber);
  if (jpgList.size() == 0) {
   System.out.println("No File Fount.");
  } else {
   for (int i = 0; i < jpgList.size(); i++) {
    System.out.println(jpgList.get(i));// 显示查找结果。
   }
  }
 }
}

 

原创粉丝点击