簡介:
IO操作面臨很多問題,信息量的巨大,網(wǎng)絡的環(huán)境等等昂利,因為IO不僅僅是對本地文件窝稿、目錄的操作祝闻,有時對二進制流奕谭、還有一部分是網(wǎng)絡方面的資源,
所以多種原因直接造成IO操作無疑是耗時且復雜多變的贵涵。Java對IO的支持是個不斷的演變過程列肢,經(jīng)過了很多的優(yōu)化,直到JDK1.4以后宾茂,才趨于穩(wěn)定瓷马,
在JDK1.4中,加入了nio類跨晴,解決了很多性能問題欧聘,雖然我們有足夠的理由不去了解關于Java IO以前的情況,但是為了學好現(xiàn)在的類端盆,
我們還是打算去研究下怀骤,通過掌握類的優(yōu)化情況來徹底理解IO的機制!Java IO主要主要在java.io包下焕妙,分為四大塊近80個類:
1基于字節(jié)操作的I/O接口:InputStream和OutputStream
2基于字符操作的I/O接口:Writer和Reader
3基于磁盤操作的I/O接口:File
4基于網(wǎng)絡操作的I/O接口:Socket(不在java.io包下)
影響IO性能的無非就是兩大因素:數(shù)據(jù)的格式及存儲的方式蒋伦,前兩類主要是數(shù)據(jù)格式方面的,后兩個類是存儲方式方面的:本地和網(wǎng)絡焚鹊。
所以策劃好這兩個方面的活動痕届,有助于我們合理使用IO。
IO結構圖:
結構圖
一末患、java io的開始:
File文件
我們主要講的是流爷抓,流的本質也是對文件的處理,我們循序漸進一步一步從文件講到到流去阻塑。
java 處理文件的類 File,java提供了十分詳細的文件處理方法果复,這里只列舉一些簡單的例子陈莽,其他的可以查API接口文檔
package com.afinalstone.file;
import java.io.File;
import java.io.FileFilter;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* Created by AFinalStone on 2017/6/27.
*/
public class F01_FileTest {
//獲取系統(tǒng)的行分隔符,文件分隔符
private String line = System.getProperty("line.separator");
private String separator_Path = System.getProperty("file.separator");
/**
* @throws IOException 檢測當前目錄是否存在文件,不存在則創(chuàng)建
*/
public static void createFile() throws IOException {
File f = new File(IO01_FileTest);
System.out.println(f);
//public boolean exists() 判斷文件是否存在
if (f.exists()) {
System.out.println("File Exists");
} else {
System.out.println("File No Exists");
// public boolean createNewFile() 創(chuàng)建新文件
// public boolean mkdir() 根據(jù)路徑創(chuàng)建單級目錄
// public boolean mkdirs() 根據(jù)路徑創(chuàng)建目錄且允許創(chuàng)建多級目錄
f.createNewFile();
}
}
/**
* 獲得文件最后一次修改時間
*/
public static void getTimeOfLastModified() {
File f = new File(IO01_FileTest);
//public long lastModified() 文件最后一次被修改的時間,UNIX時間
long time = f.lastModified();
System.out.println(time);
Date d = new Date(time);
System.out.println(d);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm");
System.out.println(sdf.format(d));
}
public static void operateFile() {
File f = new File(IO01_FileTest);
//public boolean canWrite() 文件是否可寫
System.out.println("canWrite: "+f.canWrite());
//public long length() 返回文件內容長度,單位字節(jié)
System.out.println("length: "+f.length());
//public String getPath() 返回文件的路徑信息
System.out.println("getPath: "+f.getPath());
//public boolean isFile() 判斷給定的路徑是否是一個文件
System.out.println("isFile: "+f.isFile());
//public boolean isDirectory() 判斷給定的路徑是否為目錄
System.out.println("isDirectory: "+f.isDirectory());
//public String getName() 獲得目錄的名字
System.out.println("getName: "+f.getName());
System.out.println("getPath: "+f.getPath());
//public boolean renameTo(File dest) 重命名文件走搁,路徑不同會新建
//f.renameTo(new File("c:\\test\\b.txt"));
//public boolean delete() 刪除文件或者空目錄
// f.delete();
}
public static void listFile(){
// public File[] listFiles() 列出指定目錄的全部文件和文件夾
File fs=new File("src\\com\\afinalstone\\file");
File[] temp=fs.listFiles();
for (int i = 0; i < temp.length; i++) {
System.out.println(temp[i]+"\t"+temp[i].length()+"\t"+temp[i].lastModified());
}
// public String[] list() 列出指定目錄的全部文件或文件夾的名稱
String[] s=fs.list();
for (int i = 0; i < s.length; i++) {
System.out.println(s[i]);
}
temp = fs.listFiles(new FileFilter(){//自定義一個過濾器類
public boolean accept(File f) { //.java
//1.
if(f.isFile())
{
//2.
String name=f.getName();
//System.out.println(name);
//3.
if(name.endsWith(".java"))
return true;
else {
return false;
}
}
else {
return false;
}
}});
for (int i = 0; i < temp.length; i++) {
System.out.println(temp[i]);
}
}
}
項目地址:傳送門