Java基礎(chǔ)知識之I/O流和File類文件操作
?I/O流原理及流的分類
??I/O原理
- I/O是Input和Output的縮寫,I/O技術(shù)是非常實用的技術(shù),用于處理數(shù)據(jù)傳輸(如:讀/寫文件,網(wǎng)絡(luò)通信)
- Java程序中,對于數(shù)據(jù)的輸入/輸出操作是以流(stream)的方式進行的
- java.io包下提供了各種流(stream)類和接口,用以獲取不同種類的數(shù)據(jù),并通過方法輸入和輸出數(shù)據(jù)。
- 文件流:文件在程序中是以流的形式操作的
輸入流:數(shù)據(jù)從數(shù)據(jù)源(文件)到程序(內(nèi)存)的路徑
輸出流:數(shù)據(jù)從程序(內(nèi)存)到數(shù)據(jù)源(文件)的路徑
??I/O流的分類
- 按操作數(shù)據(jù)單位分為:字節(jié)流(二進制文件)、字符流(文本文件)
- 按數(shù)據(jù)的流向分為:輸入流、輸出流
- 按流的角色分為:節(jié)點流、處理流
抽象基類 | 字節(jié)流 | 字符流 |
---|---|---|
輸入流 | InputStream | Reader |
輸出流 | OutputStream | Writer |
??I/O的體系結(jié)構(gòu)
???文件(File)
??概念
什么是文件?
文件,對于我們并陌生,文件就是保存數(shù)據(jù)的地方,比如word文檔、txt文本、excel文件、圖片、視頻…等都是文件,操作系統(tǒng)中以文件為單位管理磁盤中的數(shù)據(jù)。從數(shù)據(jù)存儲角度來說,所有文件本質(zhì)上都是一樣的,都是由一個個字節(jié)組成的歸根到底都是0-1比特串。
文件夾(目錄)
多個文件如果不分類放在一起,用戶使用起來就非常不方便,因此,又引入了樹形目錄(也叫文件夾)的機制,可以把文件放在不同的文件夾中,文件夾中還可以嵌套文件夾,這就便于用戶對文件進行管理和使用。
??常用操作(File類)
創(chuàng)建文件對象相關(guān)構(gòu)造器和方法
new File(String pathname);//根據(jù)路徑構(gòu)建一個File對象
new File(File parent,String child);//根據(jù)父目錄文件+子路徑構(gòu)建
new File(String parent,String child);//根據(jù)父目錄路徑+子路徑構(gòu)建
createNewFile();//創(chuàng)建新文件
在E盤下,用以上方式創(chuàng)建文件test01.txt\test02.txt\test03.txt
import java.io.File; import java.io.IOException; public class FileCreate { public static void main(String[] args) throws IOException { //方式1 String pathname = "e:\\test01.txt"; File file1 = new File(pathname); file1.createNewFile(); //方式2 File parentfile = new File("e:\\"); String child2 = "test02.txt"; File file2 = new File(parentfile, child2); file2.createNewFile(); //方式3 String parent = "e:\\"; String child3 = "test03.txt"; File file3 = new File(parent, child3); file3.createNewFile(); } }
獲取文件的相關(guān)信息
get.getName();//獲取文件名字
canRead();//文件是否可讀
canWrite();//文件是否可寫
getAbsoultePath();//獲取文件的絕對路徑
getPath();//相對路徑
getParent();//獲取文件父級目錄
lenth();//文件大?。ㄗ止?jié))
exists();//判斷文件是否存在
isFile();//判斷是不是一個文件
isDirectory();//判斷是不是一個目錄
import java.io.File; public class FileInfomation { public static void main(String[] args) { //創(chuàng)建文件對象 File file = new File("e:\\test01.txt"); System.out.println("文件名字:" + file.getName()); System.out.println("文件是否可讀:" + file.canRead()); System.out.println("文件是否可寫:" + file.canWrite()); System.out.println("文件絕對路徑:" + file.getAbsolutePath()); System.out.println("文件大小(字節(jié)):" + file.length()); System.out.println("文件是否存在:" + file.exists()); System.out.println("是不是一個文件:" + file.isFile()); System.out.println("是不是一個目錄:" + file.isDirectory()); } }
文件比較
File f1=new File("D:\\test1.txt"); File f2=new File("D:\\test2.txt"); f1==f2;//比較的是兩個對象的地址 f1.equals(f2);//比較兩個對象對應(yīng)的文件的路徑
目錄操作和文件刪除
mkdir();//創(chuàng)建單層目錄
mkdirs();//創(chuàng)建多層目錄
delete();//刪除目錄(這層目錄必須為空,沒有內(nèi)容)
查看文件目錄
list();//返回一個字符串數(shù)組,命名由此抽象路徑名表示的目錄中的文件和目錄。
listFiles();//返回一個抽象路徑名數(shù)組,表示由該抽象路徑名表示的目錄中的文件。
案列:遍歷一個目錄下的所有文件打印輸出
public class PrintFile { public static void main(String[] args) { //創(chuàng)建文件對象 File file = new File("e:\\Test"); String[] list = file.list();//文件夾下目錄/文件對應(yīng)的名字的數(shù)組 for (String s : list) { System.out.println(s); } File[] files = file.listFiles(); for (File f : files) { System.out.println(f.getName() + "," + f.getAbsolutePath()); } } }
??遍歷目錄
1.給定一個文件對象file
2.listFiles()獲取該文件下的所有文件對象數(shù)組
3.遍歷File對象數(shù)組,如果是目錄,遞歸調(diào)用該方法獲取該目錄下的所有文件對象;如果是文件,打印輸出路徑+姓名
import java.io.File; public class PrintFile { public static void main(String[] args) { File file = new File("E:\\Code"); getAllFile(file); } public static void getAllFile(File file) { //獲取給定目錄下的所有File對象數(shù)組 File[] files = file.listFiles(); //開始遍歷 if (files != null) { for (File f : files) { if (f.isDirectory()) {//判斷是否為目錄,如果是,調(diào)用遞歸 getAllFile(f); } else {//不是,就打印路徑+文件名 System.out.println(f.getAbsoluteFile() + "下的:" + f.getName()); } } } } }
總結(jié)
到此這篇關(guān)于Java基礎(chǔ)知識之I/O流和File類文件操作的文章就介紹到這了,更多相關(guān)Java I/O流和File類操作內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Mybatis + js 實現(xiàn)下拉列表二級聯(lián)動效果
這篇文章給大家介紹基于Mybatis + js 實現(xiàn)下拉列表二級聯(lián)動效果,實現(xiàn)代碼分為前端界面實現(xiàn)和后端處理方法,代碼簡單易懂,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧2021-06-06Java 讀取網(wǎng)絡(luò)圖片存儲到本地并生成縮略圖
用Java做開發(fā)經(jīng)常需要處理圖片。本文就來看一下如何保存圖片到本地并生成縮略圖2021-05-05通過idea創(chuàng)建Spring Boot項目并配置啟動過程圖解
這篇文章主要介紹了通過idea創(chuàng)建Spring Boot項目并配置啟動過程圖解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2019-11-11SpringBoot內(nèi)置數(shù)據(jù)源的持久化與解決方案
數(shù)據(jù)源的配置 我們先基于SpringBoot默認的HikariDataSource數(shù)據(jù)源,導(dǎo)入JDBC場景,看看SpringBoot幫我們自動配置了什么,下面我們來了解SpringBoot內(nèi)置數(shù)據(jù)源持久化2022-07-07MyBatis-Plus如何關(guān)閉SQL日志打印詳解
在使用mybatisplus進行開發(fā)時,日志是一個非常有用的工具,它可以幫助我們更好地了解和調(diào)試我們的代碼,這篇文章主要給大家介紹了關(guān)于MyBatis-Plus如何關(guān)閉SQL日志打印的相關(guān)資料,需要的朋友可以參考下2024-03-03