Java中檔案操作
阿新 • • 發佈:2018-12-22
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();
}
}