java- Java IO
來源:程序員人生 發(fā)布時間:2016-08-11 08:28:30 閱讀次數(shù):2536次

這是java io 比較基本的1些處理流,除此以外我們還會提到1些比較深入的基于io的處理類,比如console類,SteamTokenzier,Externalizable接口,Serializable接口等等1些高級用法極為原理。
1、java io的開始:文件
1. 我們主要講的是流,流的本質(zhì)也是對文件的處理,我們按部就班1步1步從文件將到流去。
2. java 處理文件的類 File,java提供了10分詳細的文件處理方法,舉了其中幾個例子,其余的可以去
-
package com.hxw.io;
-
import java.io.*;
-
-
public class FileExample{
-
public static void main(String[] args) {
-
-
createFile();
-
}
-
-
-
-
-
public static void createFile() {
-
File f=new File("E:/電腦桌面/jar/files/create.txt");
-
try{
-
f.createNewFile();
-
System.out.println("該分區(qū)大小"+f.getTotalSpace()/(1024*1024*1024)+"G");
-
f.mkdirs();
-
-
System.out.println("文件名 "+f.getName());
-
System.out.println("文件父目錄字符串 "+f.getParent());
-
-
}catch (Exception e) {
-
e.printStackTrace();
-
}
-
}
-
}
2、字節(jié)流:
1.字節(jié)流有輸入和輸出流,我們首先看輸入流InputStream,我們首先解析1個例子(FileInputStream)。
-
package com.hxw.io;
-
import java.io.File;
-
import java.io.FileInputStream;
-
import java.io.IOException;
-
import java.io.InputStream;
-
public class FileCount {
-
-
-
-
publicstatic void main(String[] args) {
-
-
int count=0;
-
InputStreamstreamReader = null;
-
try{
-
streamReader=newFileInputStream(new File("D:/David/Java/java 高級進階/files/tiger.jpg"));
-
-
-
-
while(streamReader.read()!=-1) {
-
count++;
-
}
-
System.out.println("---長度是: "+count+" 字節(jié)");
-
}catch (final IOException e) {
-
-
e.printStackTrace();
-
}finally{
-
try{
-
streamReader.close();
-
}catch (IOException e) {
-
-
e.printStackTrace();
-
}
-
}
-
}
-
-
}
我們1步1步來,首先,上面的程序存在問題是,每讀取1個自己我都要去用到FileInputStream,我輸出的結(jié)果是“---長度是: 64982 字節(jié)”,那末進行了64982次操作!可能想象如果文件10分龐大,這樣的操作肯定會出大問題,所以引出了緩沖區(qū)的概念。可以將streamReader.read()改成streamReader.read(byte[]b)此方法讀取的字節(jié)數(shù)目等于字節(jié)數(shù)組的長度,讀取的數(shù)據(jù)被存儲在字節(jié)數(shù)組中,返回讀取的字節(jié)數(shù),InputStream還有其他方法mark,reset,markSupported方法,例如:
markSupported 判斷該輸入流能支持mark
和 reset
方法。
mark用于標記當前位置;在讀取1定數(shù)量的數(shù)據(jù)(小于readlimit的數(shù)據(jù))后使用reset可以回到mark標記的位置。
FileInputStream不支持mark/reset操作;BufferedInputStream支持此操作;
mark(readlimit)的含義是在當前位置作1個標記,制定可以重新讀取的最大字節(jié)數(shù),也就是說你如果標記后讀取的字節(jié)數(shù)大于readlimit,你就再也回不到回來的位置了。
通常InputStream的read()返回⑴后,說明到達文件尾,不能再讀取。除非使用了mark/reset。
2.FileOutputStream 按部就班版, InputStream是所有字節(jié)輸出流的父類,子類有ByteArrayOutputStream,FileOutputStream,ObjectOutputStreanm,這些我們在后面都會逐一說到。先說FileOutputStream
我以1個文件復制程序來講,順便演示1下緩存區(qū)的使用。(Java I/O默許是不緩沖流的,所謂“緩沖”就是先把從流中得到的1塊字節(jié)序列暫存在1個被稱為buffer的內(nèi)部字節(jié)數(shù)組里,然后你可以1下子取到這1整塊的字節(jié)數(shù)據(jù),沒有緩沖的流只能1個字節(jié)1個字節(jié)讀,效力孰高孰低1目了然。有兩個特殊的輸入流實現(xiàn)了緩沖功能,1個是我們經(jīng)常使用的BufferedInputStream.)
-
package com.hxw.io;
-
import java.io.*;
-
-
public class FileCopy {
-
-
public static void main(String[] args) {
-
-
byte[] buffer=new byte[512];
-
int numberRead=0;
-
FileInputStream input=null;
-
FileOutputStream out =null;
-
try {
-
input=new FileInputStream("D:/David/Java/java 高級進階/files/tiger.jpg");
-
out=new FileOutputStream("D:/David/Java/java 高級進階/files/tiger2.jpg");
-
-
while ((numberRead=input.read(buffer))!=-1) {
-
out.write(buffer, 0, numberRead);
-
}
-
} catch (final IOException e) {
-
-
e.printStackTrace();
-
}finally{
-
try {
-
input.close();
生活不易,碼農(nóng)辛苦
如果您覺得本網(wǎng)站對您的學習有所幫助,可以手機掃描二維碼進行捐贈