1. 程式人生 > >Java中檔案操作

Java中檔案操作

java提供了一些實現類對檔案進行操作

File

對具體檔案(目錄)進行抽象表示。File類只用於表示檔案或者目錄的資訊(名稱、大小),不能用於檔案內容的訪問。

file類的方法比較多,以一個例項演示常用的幾個API。

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

/**
 * @program: file
 * @description: File 類的使用
 * @author: huang xin
 * @create: 2018-11-16 11:06
 */
public class FileDemo {

    public
static void main(String[] args) { //構造方法1:String型別的路徑名 File file = new File("D:\\JAVA方向\\haha"); //System.out.println(file.exists()); if (!file.exists()) //判斷檔案狀態 file.mkdir(); //建立目錄 //file.mkdirs(); // 多級目錄時,建立目錄結構 else file.delete();
//刪除檔案操作 //是否是目錄(狀態) System.out.println(file.isDirectory()); //是否是檔案(狀態) System.out.println(file.isFile()); //File file1 = new File("D:\\JAVA方向\\huangxin.txt"); //構造方法2:拼接路徑 File file1 = new File("D:\\JAVA方向","huangxin.txt"); if (!file1.exists
()) { try { file1.createNewFile(); //建立檔案(檔案操作) } catch (IOException e) { e.printStackTrace(); } } else { file1.delete(); } //常用的File物件API System.out.println(file); //file.toSpring()的內容 System.out.println(file1);//D:\JAVA方向\huangxin.txt System.out.println(file.getAbsolutePath()); System.out.println(file.getName()); //目錄名 System.out.println(file1.getName()); //huangxin.txt {檔名(不包含路徑)} System.out.println(file1.getParent()); //D:\JAVA方向 System.out.println(file1.getParentFile().getAbsolutePath()); } }

File類的進階操作,實現目錄的遍歷

import java.io.File;

/**
 * @program: file
 * @description: 目錄操作類
 * @author: huang xin
 * @create: 2018-11-16 13:28
 */
public class FileUtils {

    /**列出指定目錄下(包括其子目錄)的所有檔案
     * 傳入引數:父目錄
     * */
    public static void listDirectory(File dir){
        if (!dir.exists()){
            throw new IllegalArgumentException("目錄;"+ dir + "不存在");
        }
        if (!dir.isDirectory()){
            throw new IllegalArgumentException(dir+"不是目錄");
        }
       /* String[] filenames = dir.list(); //列出當前目錄下的子目錄和檔案
        for (String string : filenames) {
            System.out.println(dir+ "\\"+string);
        }*/

        File[] files = dir.listFiles(); //返回的是直接子目錄(檔案)的抽象
        if (files!=null && files.length > 0){
            for (File file: files) {
                if (file.isDirectory()){ //判斷是目錄就遞迴
                    listDirectory(file);
                }else {
                    System.out.println(file);//不是目錄就列印
                }
            }
        }
    }
}

RandomAccessFile類

見名知義,提供了對檔案內容的訪問,既可以讀檔案,也可寫檔案。注意 只支援位元組的讀和寫

import java.io.File;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.util.Arrays;

/**
 * @program: file
 * @description: 使用RandomAccessFile
 * @author: huang xin
 * @create: 2018-11-16 14:16
 */
public class RafDemo {
    public static void main(String[] args) throws IOException {
        File demo = new File("demo");
        if (!demo.exists()){
            demo.mkdir(); //建立目錄
        }
        //構造方法3;File物件加檔名
        File file = new File(demo,"raf.dat");
        if (!file.exists()) {
            try {
                file.createNewFile();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        /**下面用RandomAccessFile對檔案操作
         * A:寫到檔案中:
         *  1、建立物件,指定讀寫模式
         *  2、字元內容轉換成位元組型別
         *  3、randomAccessFile物件的write()寫到檔案中
         *
         * B:讀到記憶體中:
         *  1、開闢位元組陣列空間
         *  2、randomAccessFile物件的read()方法讀到記憶體中
         *  3、Arrays.toString(buf) 將位元組陣列轉成字串
         *
         * 注意:檔案記錄指標,表示當前程式讀寫位置。寫好檔案後想重新讀檔案需要seek(0)
         * */
        RandomAccessFile raf = new RandomAccessFile(file,"rw"); //建立物件,指定讀寫許可權

        System.out.println(raf.getFilePointer());//獲取指標的位置

        int i = 0x7ffffff; //最大的整數
        raf.writeInt(i);  //直接寫入int型別,裡面實現也是byte寫入

        //寫入位元組陣列
        String s = "中";
        byte[] gbk = s.getBytes("gbk");
        raf.write(gbk);
        System.out.println(raf.getFilePointer());
        System.out.println(raf.length());

        //讀檔案,必須把指標移到頭部
        raf.seek(0);

        //一次性把檔案的內容讀到位元組陣列中
        byte[] buf = new byte[(int)raf.length()];
        raf.read(buf);

        System.out.println(Arrays.toString(buf));
        raf.close();
    }
}