I / O之流和File類

 一、 流

       在程序開發過程中,將不同輸入、輸出設備(如文件、網絡、壓縮包等)之間的數據傳輸抽象爲流。

        Java的IO支持通過java.io包下的類和接口支持,在java.io包下主要包括輸入、輸出兩種IO流,每種輸入、輸出流又可分爲字節流和字符流兩大類。其中字節類以字節爲單位來處理輸入、輸出操作,而字符串流則以字符來處理輸入、輸出操作。

流的概念和分類

流是程序中流淌的血液,數據的傳輸都是通過兩種類型的流:輸入流和輸出流,這就是IO。需要讀入數據使用輸入流,需要寫入數據使用輸出流;

按照操作的數據類型分類:字節流和字符流

       字節流可以讀取和寫入任何數據,因爲任何數據最終都能以字節存儲;

       字符流只能操作文本類型的文件,按照字符進行讀取和寫入,方便對字符的操作

常用的一些字節流子類:

       文件輸入輸出流:FileInputStream、FileOutputStream

       對象輸入輸出流:ObjectInputStream、ObjectOutputStream

常用的一些字符流子類:

       文件輸入輸出流:FileReader 、FileWriter

       緩存的文件輸入輸出流:BufferedReader 、BufferedWriter

字節流和字符流用法幾乎一樣,區別在於操作的數據單元不同:

       字節流操作的最小數據單元是8位的字節(主要由InputStream和OutputStream作爲基類)

       字符流操作的最小數據單元是16位的字符(主要由Reader和Writer作爲基類)

二、File類

         File類是java.io包中唯一代表磁盤文件本身的對象。File類定義了一些與平臺無關的方法來操作文件,可以通過調用File類中的方法,實現創建、刪除、重命名文件等操作。File類對象主要用來獲取文件本身的一些信息,如文件所在目錄、文件長度、文件讀寫權限等。

注意:File不能訪問文件內容本身,如果需要訪問文件內容本身,則需要使用輸入/輸出流。

 1.三種構造方法創建文件對象

(1). File(String path)

     該構造方法通過將給定路徑名字符串轉化爲抽象路徑名來創建一個新File實例。

     語法如下:new File(String path)   其中 path 指路徑名稱包含文件名    例如: File file = new File("E:\\test.txt");

(2). File(String parent,String child)

     該構造方法根據定義的父路徑和子路徑字符串,創建一個新的File對象。

    語法如下:new File(String parent,String child)

    parent: 父路徑字符串  例如 D:/ 或 D:/doc/

    child:子路徑字符串。例如:test.txt

(3).File(File f,String child)

     該構造方法根據parent抽象路徑和child路徑名字符串創建一個新File實例。

     語法如下: new File(File f,String child)

     parent: 父路徑對象  例如 D:/doc/

     child:子路徑字符串。例如:test.txt

2.文件操作

       常見的文件操作主要有判斷文件是否存在、創建文件、重命名文件、刪除文件以及獲取文件的基本信息(例如文件名稱、大小、修改時間、是否隱藏)等。

package com.aiit.book.file;

import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class FileTest {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		File file = new File("E:/test.txt"); //創建文件對象
		if(!file.exists()) {//如果文件不存在,創建對象
			System.out.println("文件不存在");
			String fileName = file.getName();//獲取文件名
			System.out.println("文件名"+fileName);
			try {												
				file.createNewFile();//創建文件
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}//
			
		}else {
			System.out.println("文件存在");
			if(file.isFile()&&file.canRead()) { //該文件是一個標準文件且可讀
				System.out.println("該文件可讀!正在讀取文件信息");
				File parent = file.getParentFile();//獲取文件目錄
				String fileName = file.getName();//獲取文件名
				String filePath = file.getPath();//獲取該文件的絕對路徑
				boolean hidden = file.isHidden();//獲得該文件是否被隱藏
				long len = file.length();//獲取該文件的字節數
				long tempTime = file.lastModified();//獲取該文件最後修改時間
				Date date = new Date(tempTime);
				SimpleDateFormat sdf = new SimpleDateFormat("yyy/MM/dd HH:mm:ss");
				String time = sdf.format(date);
				System.out.println("文件目錄"+parent);
				System.out.println("文件名"+fileName);
				System.out.println("文件的絕對路徑"+filePath);
				System.out.println("該文件是否被隱藏"+hidden);
				System.out.println("文件的字節數"+len);			
				System.out.println("文件最後修改時間"+tempTime);
				System.out.println("文件時間"+time);
				file.delete();//刪除文件
				
			}else{
				System.out.println("文件不可讀");
			}
		}
	}

}

運行程序,第一次執行,首先創建文件,在E盤能找到,控制檯輸出信息:

第二次運行程序,獲取文件信息,並刪除文件,控制檯輸出信息:

注意:在創建File對象時,如果直接寫文件名,則創建的文件位於項目文件夾下。 

3.文件夾操作

     常見的文件夾操作主要有判斷文件夾是否存在、創建文件夾、刪除文件夾、獲取文件夾中包含的子文件夾及文件等。

package com.aiit.book.file;

import java.io.File;

public class FolderTest {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		String path = "E:\\erweima"; //聲明文件夾erweima所在的目錄
		for(int i = 1;i<=10;i++) {
			File folder = new File(path+"\\"+i);
			if(!folder.exists()) {//文件夾不存 在
				folder.mkdir();//創建新的文件夾
			}
			System.out.println("文件夾創建成功");
			File file = new File("E:\\");
			File[] files = file.listFiles();//獲得C盤的所有文件和文件夾
			for (File file2 : files) {
				if(file2.isFile()) {//判斷是否是文件
					System.out.println(file2.getName()+"文件");
					
				}else if(file2.isDirectory()){//判斷是否是文件夾
					System.out.println(file2.getName()+"文件夾");
				}
			}
		}
		
		
	}

}

運行結果:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章