文件操作

文件File

文件和目录路径名的抽象表示形式
public static void main(String[] args) {
        // 是不是文件
        String path = "d:"+File.separator+"a.txt";//\  
        System.out.println(File.separator);
        File file = new File(path);
        if (file.isFile()) {
            System.out.println("是文件!");
        } else {
            System.out.println("not file!");
        }

        // 是不是目录
        String p = "d:"+File.separator;
        File f = new File(p);
        if(f.isDirectory()){
            System.out.println("是目录!");
        } else {
            System.out.println("not Directory!");
        }
    }

文件的基本操作

public class FileOperation {

    public static void main(String[] args) {
        try {
            // 实例操作一:创建一个新文件
            // 在d:\创建aa.txt文件
            String path1 = "d:" + File.separator + "aa.txt";
            File file1 = new File(path1);
            boolean flag = file1.createNewFile();
            if(flag){
                System.out.println(" create ok!");
            }else{
                System.out.println(" create no!");
            }
            // 实例操作二:删除一个指定的文件
            /*boolean del = file1.delete();
            if(del){
                System.out.println(" delete ok!");
            }else{
                System.out.println(" delete no!");
            }*/
            // 实例操作三:综合创建、删除文件的操作
            // 实例操作四:创建一个文件夹
            String pd="d:"+File.separator+"aaa"+File.separator+"bb";
            File f1 = new File(pd);
//            f1.mkdir();//只能创建一层目录
            f1.mkdirs();//既可以创建一层,也可以创建多级目录
            System.out.println("文件夹创建成功!");
            // 实例操作五:列出指定目录的全部文件
                File[] fs = f1.listFiles();
                for (File file : fs) {
                    System.out.println(file);
                }
                String[] list = f1.list();//目录下所有文件名称
                for (String s : list) {
                    System.out.println(s);
                }
            // 实例操作六:判断一个给定的路径是否是目录
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

}

系统分隔符

在不同的操作系统中,路径的分隔符表示是不一样的,例如:

windows中使用反斜杆表示目录的分隔符:“” ;

linux中使用正斜杆表示目录的分隔符:“/”。

File.separator(通用)

列出指定目录的全部内容

要求:

给定一个目录,要求列出此目录下的全部内容,因为给定目录可能存在子文件夹,此时要求也可以把所有的子文件夹的子文件通通列出来。

分析:

要先判断给定的路径是否是目录,之后再使用listFiles()列出一个目录中的全部内容,一个文件夹中可能包含其他的文件或子文件夹,子文件夹中也可能会包含其他的子问夹,所以此处只能采用递归的调用方式完成。

package com.jy.file;

import java.io.File;

public class SearchFile {

    public static void main(String[] args) {
        String path="d:"+File.separator+"a";
//        String path="d:"+File.separator+"aa.txt";
        SearchFile.getFile(path);
    }
    //查找目录下的所有文件
    public static void getFile(String path){
        File file = new File(path);
        if(file.exists()){//文件是否存在
            if(file.isDirectory()){//路径
                File[] fs = file.listFiles();//获得路径下的所有文件
                if(fs.length>0){
                    for (File f : fs) {
                        if(f.isFile()){
                            System.out.println(f);//打印文件
//                            System.out.println(f.getName());//打印文件名
                        }else{
//                            System.out.println(f);
                            getFile(f.getPath());//递归调用
                        }
                    }
                }
            }else{
                System.out.println(file);//打印文件
            }
        }else{
            System.out.println("文件不存在!");
        }
        
    }

}
递归文件

文件重命名,获得父路径

public static void main(String[] args) throws IOException {

                  /*

                   * // 创建文件 String path = "d:\myFile\aa";//目录 File p = new File(path);

                   * if(!p.exists()){ p.mkdirs(); } String file="my.txt";//文件 // File f =

                   * new File(file);

                   *

                   * File ff=new File(p, file); ff.createNewFile();

                   */

                  /*File file1 = new File("d:\aa\a", "a.txt");

                  if (!file1.getParentFile().exists()) {// 获得父目录,判断目录是否存在

                          file1.getParentFile().mkdirs();// 创建父目录

                          file1.createNewFile(); // 创建文件

                  }*/

                  // boolean renameTo(File dest)

                  // 重新命名此抽象路径名表示的文件。

                  File f1 = new File("d:\a.txt");

                  f1.renameTo(new File("e:\aa.txt"));//既可以重命名,也可以实现剪切功能

         }

流 IO  Input Ouput

字节流与字符流

字节流:操作的数据,以字节为颗粒度;

输出流: OutputStream

输入流: InputStream

字符流:一字符为单位,操作数据;

输出流: Writer

输入流: Reader

能用字符流操作的,字节流都能完成;

文件字输出节流

public static void main(String[] args) throws Exception {
        //向d:\a.txt中写数据
        String str ="abcdefghi";
        /*File file = new File("d:\a.txt");
        if(!file.exists()){
            file.createNewFile();
        }*/
        //输出流 ,文件字节输出流
//        FileOutputStream out = new FileOutputStream(file);
//        FileOutputStream out = new FileOutputStream("d:\a.txt");
        FileOutputStream out = new FileOutputStream("d:\a.txt",true);//true追加,false默认值,覆盖文件中的数据 
        byte[] bytes = str.getBytes();
//        out.write(bytes);
        out.write(bytes, 0, bytes.length);
        //关流
        out.close();
        
    }

文件字节输入流

与OutputStream类一样,InputStream本身也是一个抽象类,必须依靠其子类,如果现在是从文件中读取,子类肯定是FileInputStream。

观察FileInputStream类的构造方法:
public FileInputStream(File file) throws FileNotFoundException 

public static void main(String[] args) {
        try {
            FileInputStream in = new FileInputStream("d:\a.txt");
            byte[] b= new byte[1024];//存文件中的数据的字节数组
//            int read = in.read(b);
            in.read(b, 0, b.length);
//            System.out.println(new String(b));
            System.out.println(new String(b, 0, b.length));
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

文件复制

 //创建文件夹,
        String path = "e:"+File.separator+"java_file_test"+File.separator;
        File file1 = new File(path);
        file1.mkdirs();

        //创建文件
        String file_name = "my.txt";
        File file_my = new File(path, file_name);
        try {
            file_my.createNewFile();
        } catch (IOException e) {
            e.printStackTrace();
        }


        //文件复制
        FileInputStream in =null;
        FileOutputStream out =null;
        String path2 = path+"test_copy.txt";


        try {
            System.out.println(path+file_name);
            String path3 = path+file_name;
            in  = new FileInputStream(path3);
            System.out.println(path2);
            out = new FileOutputStream(path2);
            int i =0;
            byte[] b = new byte[256];
            while((i=in.read(b))!=-1){
                out.write(b,0,i);
            }

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
         finally {
            try {
                out.close();
                in.close();
            } catch (IOException e) {
                e.printStackTrace();
            }

        }

字符流

文件字符输出流

文件字符输入流

public static void main(String[] args) throws Exception {
        /*String str = "aaaabbbb";
        // FileWriter out = new FileWriter("d:\aa.txt");
        FileWriter out = new FileWriter("d:\aa.txt", true);// 追加
        // out.write(str.toCharArray());
        out.write(str);
        out.close();*/
        //读取
        FileReader in = new FileReader("d:\aa.txt");
        int i=0;//读取数据的个数
        char[] c = new char[8];
        while((i=in.read(c))!=-1){
            System.out.print(new String(c, 0, i));
        }
        in.close();

    }
原文地址:https://www.cnblogs.com/taozizainali/p/10879879.html