I/O簡介
I/O問題可以說是當今web應用中所面臨的的主要問題之一,大部分的web應用系統的瓶頸都是I/O瓶頸。這個系列主要介紹JAVA的I/O類庫基本架構、磁盤I/O工作機制、網絡I/O工作機制以及NIO的工作方式。
從1.4版本開始JAVA引入了NIO,用來提升I/O性能。I/O操作類在包java.io下,大概有將近80個類,這些類可以分為如下四組:
基於字節操作的I/O接口:InputStream和OutputStream
基於字符操作的I/O接口:Reader和Writer
基於磁盤操作的I/O接口:File
基於網絡操作的I/O接口:Socket
從字面意思理解,前兩組主要是傳輸數據的格式,后兩組是傳輸數據的方式。雖然Socket類並不在java.io包下,但是我們仍然將其歸類在一起來討論。因為我個人認為I/O的核心問題要么是數據格式影響I/O操作,要么是傳輸方式影響I/O操作。最終的問題也就是將什么樣的數據寫到什么地方的問題。
File類
本篇文章主要介紹File類的一些常用方法,首先來看下一些重要的概念:
1、一個File類的對象,表示磁盤上的文件或目錄。
2、File提供了與平台無關的方法來對磁盤上的文件或目錄進行操作。
3、File類直接處理文件和文件系統。
4、File類沒有指定信息怎樣從文件讀取或向文件存儲。
1 package io; 2 3 import java.io.File; 4 import java.io.IOException; 5 6 public class FileTest 7 { 8 public static void main(String[] args) throws IOException 9 { 10 File file = new File("f:/migu"); 11 file.mkdir(); 12 //判斷該抽象名表示的目錄是否存在 13 if(file.exists() && file.isDirectory()) 14 { 15 System.out.println("migu 目錄存在"); 16 File file1 = new File("f:/migu/UES.txt"); 17 File file2 = new File("f:\\migu\\CMU.txt"); 18 //創建文件 19 file1.createNewFile(); 20 file2.createNewFile(); 21 File file3 = new File("f:/migu/插件/支付中心"); 22 //創建此抽象名表示的目錄,以及所有必需但是不存在的父目錄 23 file3.mkdirs(); 24 File[] files = file.listFiles(); 25 //該方法返回該路徑下這一層的所有文件和目錄 26 for(File f : files) 27 { 28 System.out.println("migu目錄下的文件名:" + f.getName()); 29 System.out.println("migu目錄文件的絕對路徑:" + f.getAbsolutePath()); 30 } 31 } 32 else 33 { 34 System.out.println("migu 目錄不存在"); 35 } 36 37 } 38 }
執行結果:
migu 目錄存在
migu目錄下的文件名:CMU.txt
migu目錄文件的絕對路徑:f:\migu\CMU.txt
migu目錄下的文件名:UES.txt
migu目錄文件的絕對路徑:f:\migu\UES.txt
migu目錄下的文件名:插件
migu目錄文件的絕對路徑:f:\migu\插件
這個DEMO展示的跟File類相關的方法都是簡單易懂的,其中有兩個地方需要強調下:
1、mkdirs是創建抽象名表示的文件或者目錄,並且還會創建該目錄或者文件的所有不存在的父目錄。
2、在16、17行,我這里用了兩種不同的路徑分割符來表示抽象路徑,從運行結果來看都是可行的。那么兩者有什么區別呢?
不同操作系統下文件分隔符:windows中是“\”,linux中是“/”,在用JAVA代碼去讀取windows系統中磁盤上的文件時候,若要用“\”,必須寫成“\\”,因為一個"\"在java中表示是轉義符。所以用“\\”代表“\”。在這里我的建議是盡量都寫成“/”,因為在所有的操作系統中“/”永遠都是沒有問題的。