美文网首页
Java初级笔记No.7之Java程序实例(文件操作与目录操作)

Java初级笔记No.7之Java程序实例(文件操作与目录操作)

作者: wenmingxing | 来源:发表于2018-08-08 20:13 被阅读15次

    I、文件操作

    1.1 文件写入

    使用write()方法向文件写入内容:

    package example;
    import java.io.*;
    
    public class WriteEmp {
        public static void main(String[] args) {
            try {
                BufferedWriter out = new BufferedWriter(new FileWriter("text.txt"));
                out.write("第一次写入");
                out.close();
                System.out.println("successful!");
            } catch (IOException e) {
                
            }
        }
    }
    
    

    在工程目录中可以看到新建的文件,即写入的内容:
    1.2 读取文件内容

    使用readLine()方法来读取文件内容:

    package example;
    import java.io.*;
    public class ReadLineEmp {
        public static void main(String[] args) {
            try {
                BufferedReader in = new BufferedReader(new FileReader("text.txt"));
                String str;
                while ((str = in.readLine()) != null) {
                    System.out.println(str);
                }
                //System.out.println(str);
            } catch(IOException e) {
                
            }
        }
    
    }
    
    
    1.3 删除文件

    使用delete()方法将文件删除

    package example;
    import java.io.*;
    public class DeleteEmp {
        public static void main(String[] args) {
            try {
                File file = new File("c:\\test.txt");
                if (file.delete()) {
                    System.out.println(file.getName() + "已被删除");
                }
                else {
                    System.out.println("删除失败");
                }
            } catch(Exception e) {
                e.printStackTrace();
            }
        }
    }
    
    
    1.4 将文件内容复制到另一个文件

    使用BufferedWriter类的readwrite方法将文件内容复制到另一个文件:

    package example;
    import java.io.*;
    public class CopyFileEmp {
        public static void main(String[] args) throws Exception {
            BufferedWriter out1 = new BufferedWriter(new FileWriter("srcfile.txt"));
            out1.write("string to be copied");
            out1.close();
            
            InputStream in = new FileInputStream(new File("srcfile.txt"));
            OutputStream out = new FileOutputStream(new File("destnfile.txt"));
            
            byte[] buf = new byte[1024];
            int len;
            while ((len = in.read(buf)) > 0) {
                out.write(buf, 0, len);
            }
            
            in.close();
            out.close();
            
            BufferedReader in1 = new BufferedReader(new FileReader("destnfile.txt"));
            String str;
            while ((str = in1.readLine()) != null) {
                System.out.println(str);
            }
            in1.close();
            
        }
    }
    
    

    执行代码后,工程目录中会达到预计效果:

    1.5 向文件中追加数据

    使用filewriter方法向文件中追加数据:

    package example;
    import java.io.*;
    public class Append2FileEmp {
        public static void main(String[] args) throws Exception {
            try {
                BufferedWriter out = new BufferedWriter(new FileWriter("text.txt",true));
                out.write("第二次写入\n");
                out.close();
                
                BufferedReader in = new BufferedReader(new FileReader("text.txt"));
                String str;
                while ((str = in.readLine()) != null) {
                    System.out.println(str);
                }
                in.close();
            } catch (IOException e) {
                System.out.println("execption occoured" + e);
            }
        }
    }
    
    

    执行完毕后,之前的文件内容变为:

    1.6 创建临时文件

    使用File类的createTempFile(String prefix, String suffix)方法在默认临时目录来创建临时文件,参数prefix为前缀,suffix为后缀。

    import java.io.*;
    public class Main {
        public static void main(String[] args) throws Exception {
            File temp = File.createTempFile("testrunoobtmp", ".txt");
            System.out.println("文件路径: "+temp.getAbsolutePath());
            temp.deleteOnExit();    //终止后删除临时文件
            BufferedWriter out = new BufferedWriter(new FileWriter(temp));
            out.write("aString");
            System.out.println("临时文件已创建:");
            out.close();
        }
    }
    

    也可以使用createTempFile(String prefix, String suffix, File directory)中的directory来指定临时文件的目录:

    import java.io.File;
     
    public class Main {
     
       public static void main(String[] args) {      
          File f = null;
                
          try {
          
             // 创建临时文件
             f = File.createTempFile("tmp", ".txt", new File("C:/"));
             
             // 输出绝对路径
             System.out.println("File path: "+f.getAbsolutePath());
             
             // 终止后删除临时文件
             f.deleteOnExit();
             
             // 创建临时文件
             f = File.createTempFile("tmp", null, new File("D:/"));
             
             // 输出绝对路径
             System.out.print("File path: "+f.getAbsolutePath());
             
             // 终止后删除临时文件
             f.deleteOnExit();
             
          } catch(Exception e) {
          
             // 如果有错误输出内容
             e.printStackTrace();
          }
       }
    }
    
    1.7 获取文件大小

    使用File类的file.exists()file.length()方法来获取文件大小,以字节计算:

    package example;
    import java.io.File;
    public class FileSizeEmp {
        public static void main(String[] args) {
            long size = getFileSize("text.txt");
            System.out.println("The size is : " + size + "bytes");
        }
        
        public static long getFileSize(String filename) {
            File file = new File(filename);
            if (!file.exists() || !file.isFile()) {
                System.out.println("文件不存在");
                return -1;
            }
            
            return file.length();
        }
    }
    
    
    1.8 文件重命名

    使用File类的oldName.renameTo(newName)方法来重命名文件:

    package example;
    import java.io.File;
    public class RenameFileEmp {
        public static void main(String[] args) {
            File oldName = new File("text.txt");
            File newName = new File("newtext.txt");
            
            if (oldName.renameTo(newName)) {
                System.out.println("successful");
            }
            else {
                System.out.println("Error");
            }
        }
    }
    
    
    1.9 设置文件只读

    使用File类中的file.setReadOnly()file.canWrite()方法来设置文件只读:

    import java.io.File;
     
    public class Main {
        public static void main(String[] args) {
            File file = new File("C:/java.txt");
            System.out.println(file.setReadOnly());
            System.out.println(file.canWrite());
        }
    }
    
    2.0 在指定目录中创建文件

    使用Filefile.createTempFile()方法在指定目录中创建文件,不使用deleteOnExit()对临时文件删除:

    import java.io.File;
     
    public class Main {
        public static void main(String[] args) throws Exception {
            File file = null;
            File dir = new File("C:/");
            file = File.createTempFile
            ("JavaTemp", ".javatemp", dir);
            System.out.println(file.getPath());
        }
    }
    

    II、目录操作

    2.1 使用File类的mkdirs()创建目录
    package example;
    import java.io.File;
    public class MakeDirEmp {
        public static void main(String[] args) {
            String directories = "D:\\a\\b\\c\\d\\e\\f\\g\\h\\i";
            File file = new File(directories);
            boolean result = file.mkdirs();
            System.out.println("Status = " + result);
        }
    }
    
    
    2.2 删除目录

    使用File类的ofdir.isDirectory()dir.list()deleteDir()方法一个一个删除目录:

    import java.io.File;
     
    public class Main {
        public static void main(String[] argv) throws Exception {
            // 删除当前目录下的 test 目录
            deleteDir(new File("./test"));
        }
        public static boolean deleteDir(File dir) {
            if (dir.isDirectory()) {
                String[] children = dir.list();
                for (int i = 0; i < children.length; i++) {
                    boolean success = deleteDir
                    (new File(dir, children[i]));
                    if (!success) {
                        return false;
                    }
                }
            }
            if(dir.delete()) {
                System.out.println("目录已被删除!");
                return true;
            } else {
                System.out.println("目录删除失败!");
                return false;
            }
        }
    }
    
    2.3 判断目录是否为空

    使用File类的file.isDirectory()file.list方法判断目录是否为空:

    import java.io.File;
     
    public class Main
    {
        public static void main(String[] args)
        {
            File file = new File("./testdir");  // 当前目录下的 testdir目录
            if(file.isDirectory()){
                if(file.list().length>0){
                    System.out.println("目录不为空!");
                }else{
                    System.out.println("目录为空!");
                }
            }else{
                System.out.println("这不是一个目录!");
            }
        }
    }
    
    2.4 获取目录大小

    使用File类的FileUtils.sizeofDirectory(File Name)来获取目录大小:

    import java.io.File;
    import org.apache.commons.io.FileUtils;
     
    public class Main {
        public static void main(String[] args) {
            long size = FileUtils.sizeOfDirectory(new File("C:/test"));
            System.out.println("Size: " + size + " bytes");
        }
    }
    
    2.5 在指定目录中查找文件
    import java.io.File;
     
    public class Main {
        public static void main(String[] argv) throws Exception {
            File dir = new File("../java");
            String[] children = dir.list();
            if (children == null) {
                System.out.println("该目录不存在");
            }
            else {
                for (int i = 0; i < children.length; i++) {
                    String filename = children[i];
                    System.out.println(filename);
                }
            }
        }
    }
    
    2.6 获取文件上级目录

    使用File类的file.getParent()方法获取文件的上级目录:

    import java.io.File;
     
    public class Main {
        public static void main(String[] args) {
            File file = new File("C:/File/demo.txt");
            String strParentDirectory = file.getParent();
            System.out.println("文件的上级目录为 : " + strParentDirectory);
        }
    }
    
    2.7 打印目录结构

    使用File类的file.getName()file.listFiles()方法来打印目录结构:

    import java.io.File;
    import java.io.IOException;
     
    public class FileUtil {
        public static void main(String[] a)throws IOException{
            showDir(1, new File("d:\\Java"));
        }
        static void showDir(int indent, File file) throws IOException {
            for (int i = 0; i < indent; i++)
                System.out.print('-');
            System.out.println(file.getName());
            if (file.isDirectory()) {
                File[] files = file.listFiles();
                for (int i = 0; i < files.length; i++)
                    showDir(indent + 4, files[i]);
            }
        }
    }
    
    2.8 遍历指定目录下的所有目录

    使用Filelist方法来遍历指定目录下的所有目录:

    import java.io.*;
     
    class Main {
       public static void main(String[] args) {
          File dir = new File("F:");
          File[] files = dir.listFiles();
          FileFilter fileFilter = new FileFilter() {
             public boolean accept(File file) {
                return file.isDirectory();
             }
          };
          files = dir.listFiles(fileFilter);
          System.out.println(files.length);
          if (files.length == 0) {
             System.out.println("目录不存在或它不是一个目录");
          }
          else {
             for (int i=0; i< files.length; i++) {
                File filename = files[i];
                System.out.println(filename.toString());
             }
          }
       }
    }  
    
    2.9 输出指定目录下的所有文件

    使用File类的list方法来输出指定目录下的所有文件:

    class Main {
        public static void main(String[] args) {
            File dir = new File("C:");
            String[] children = dir.list();
            if (children == null) {
                System.out.println( "目录不存在或它不是一个目录");
            }
            else {
                for (int i=0; i< children.length; i++) {
                    String filename = children[i];
                    System.out.println(filename);
                }
            }
        }
    }
    
    2.10 在指定目录中查找字母'b'开头的所有文件:
    import java.io.*;
     
    class Main {
       public static void main(String[] args) {
          File dir = new File("C:");
          FilenameFilter filter = new FilenameFilter() {
             public boolean accept
             (File dir, String name) {
                return name.startsWith("b");
            }
          };
          String[] children = dir.list(filter);
          if (children == null) {
             System.out.println("目录不存在或它不是一个目录");
          } 
          else {
             for (int i=0; i < children.length; i++) {
                String filename = children[i];
                System.out.println(filename);
             }
          } 
       }
    }
    

    相关文章

      网友评论

          本文标题:Java初级笔记No.7之Java程序实例(文件操作与目录操作)

          本文链接:https://www.haomeiwen.com/subject/slaxbftx.html