導航:首頁 > 文件教程 > java文件輸入輸出流

java文件輸入輸出流

發布時間:2024-02-02 11:04:53

java中列印流與輸出流有什麼區別和聯系

最簡單的理解,輸入流就是把數據讀入內存的一條通道,至於這里的數據時哪裡來的,各個不同的流之間有區別,它可以來自於本地文件,用戶鍵盤的輸入,網路伺服器等等,總之你要獲取數據,就可以通過輸入流。相反,輸出流就是數據輸出的通道,如我們程序中常用的System.out.println();就是通過標准輸出流實現列印的...

❷ java 輸入輸出流 (被採納為答案者加100分)

其中BufferedInputStream是FileInputStream的子類,你可以理解成同樣處理一個文件,BufferedInputStream效率更高,原因是BufferedInputStream採用了更高效的位元組流處理方式,
BufferedInputStream才用緩沖流把內在的緩沖器連接到I/O流,允許java程序對多個位元組同時操作,這樣就提高了效率。

inputstreamreader的構造函數帶兩個參數,一是關聯到的文件,二是字元解碼方式. 所以實際上通過inputstreamreader實例讀出來的東西已經不是磁碟上原始的位元組數據了,而是根據你指定的解碼方式(如果你沒有指定,則使用系統預設的,win2000下是gbk/gb2312)把位元組流轉換成了字元流,注意位元組流和字元流的區別,一個位元組就是8比特位(32位機器上),而一個字元含多少位元組則與不同的編碼/解碼方式有關了,如gbk是一位元組,utf-8是1-3的變長位元組,utf-16是2個定長位元組.
於是值得你注意的就是當你用inputstreamreader讀文件時,你應該知道該文件被存儲時是用什麼方式編碼的,否則你指定錯了解碼方式,讀出來的就是亂碼.但是退一步來說,在全英文環境下,問題也沒這嚴重.因為所有的字元集在前七位上都是與ascii兼容的(我猜的,也許有的不是),然而當你的程序涉及中文字元時,肯定是會出錯了.
那麼fileinputstream的特點呢?它的構造函數就一個,即關聯到的文件,既然沒有指定解碼方式,那它所做的就是只以位元組流的方式讀出文件而不做任何處理, 你應該用一個位元組數組來接受它,對該數組你以後還可以做任何想做的操作。
給你個例子,自己去測試
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.util.*;

public class test {

/* public static void main(String[] args) {
String str=new String("Face recognition in the thermal infrared domain has received relatively little attention in the literature in comparison with recognition in visible-spectrum imagery");
StringTokenizer token=new StringTokenizer(str);
Hashtable ht=new Hashtable();
while(token.hasMoreTokens()){
String temp=new String(token.nextToken());
ht.put(temp,temp);
}
Enumeration en=ht.keys();
while(en.hasMoreElements()){
Object obj=en.nextElement();
System.out.print("KEY_NO:"+obj);
System.out.println("="+ht.get(obj));
}
}
*/

public static void main(String[] args){
try {
String file1 ="d:\\1.doc";
String file2 ="d:\\2.doc";
File(file1,file2);
readFile(file2);
//fileCheck("d:\\test1.txt");
// readFile("D:\\test1.txt");
// readFileByte("D:\\test1.txt");
// readFileByFile("D:\\test1.txt");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

public static void testFile() throws IOException{
File("D:\\test1.txt","D:\\test2.txt");

}
public static void File(String inName,String outName) throws IOException
{
File tmp = new File(outName);
if(!tmp.canRead())tmp.createNewFile();

BufferedInputStream in = new BufferedInputStream(new FileInputStream(inName));
BufferedOutputStream out= new BufferedOutputStream(new FileOutputStream(outName));
File(in,out,true);
}
public static void readFile(String inName) throws IOException
{
BufferedReader read = new BufferedReader (new InputStreamReader(new FileInputStream(inName)));
String b ;
while((b=read.readLine())!=null )
print( b);
}
public static void readFileByte(String inName) throws IOException
{
BufferedInputStream read = new BufferedInputStream (new FileInputStream(inName));
int b = 0;
while((b=read.read())!=-1)
System.out.print ((char)b);
}
public static void readFileByFile(String name) throws IOException
{
File tmp = new File (name);
FileReader fr= new FileReader(tmp);
BufferedReader br = new BufferedReader(fr);
String b;
while((b=br.readLine())!=null)
print(b);

}

public static void File(InputStream in ,OutputStream out, boolean close) throws IOException{
int b;
while((b=in.read())!=-1)
{
out.write(b);
}
in.close();
if(close)
out.close();
}
public static void print(Object o)
{
System.out.println(o);
}
public static void fileCheck(String name) throws IOException
{
print("---"+name+"---");
File f= new File(name);

if(!f.exists())
{
print("fle not exist!");
return;
}

print("Canonical name:"+f.getCanonicalPath());
String p= f.getParent();
if(p!=null)
print("Parent directory :"+p);

if(f.canRead())print("file can be read!");

if(f.canWrite())print("file can be writable!");

Date d = new Date();
d.setTime(f.lastModified());
print("last modified time :"+d);

if(f.isFile())
{
print("file size is :"+f.length()+" bytes");
}else if(f.isDirectory()){print("is a directry!");}
else{
print("neither a directory or a file!");
}

print("");

}

}

❸ java IO輸入輸出流中的各種位元組流,字元流類,我需要都記住嗎,還是只要記住幾個常用的呢

記住幾個常用的就行了, 一般也就是用幾個常用的。
位元組流
位元組流主要是操作byte類型數據,也byte數組為准,主要操作類就是
·位元組輸出流:OutputStream
·位元組輸入流:InputStream

字元流
在程序中一個字元等於2個位元組,那麼java提供了Reader、Writer兩個專門操作字元流的類。
·字元輸出流:Writer
·字元輸入流:Reader

位元組-字元轉換流
OutputStreamWriter和InputStreamReader
在整個IO包中,實際上就是位元組流和字元流,但是除了這兩個流之外,還存在一組位元組流-字元流的轉換類。
[java] view plainprint?
•OutputStreamWriter:是Writer的子類,將輸出的字元流轉換為位元組流。即:將一個位元組流的輸出對象變為位元組流的輸出對象
•InputStreamReader:是Reader的子類,將輸入的位元組流變為字元流,即:將一個位元組流的輸入對象變為字元流的輸入對象。

❹ java 中對輸入輸出流類型重復調用,只對最後一次調用進行關閉,之前的調用不關閉,會有什麼後果

不是很理解 隨便說說
你當然可以不關閉 之所以用完就關閉 是防止佔用連接資源以及連接沖突 有些連接你不關閉的話 其他地方就不能使用了 並不是一定需要關閉 有些時候為了重用 是特意不關閉的 比如說資料庫連接池 他就是打開指定數目的數據連接 不關閉 程序需要使用資料庫連接了從連接池獲取 連接池負責管理連接 比如說保證給程序的是一個可用連接等等
一般情況下上層流關閉的同時也會將下層流關閉 比如說你在InputStream上套一個緩沖流 那麼你將緩沖流關閉了 InputStream同時也會關閉的 你如果套了好幾個的話 那麼只要關閉一個 其他所有流都沒辦法使用了 因為它們作為基本的流已經關閉了

閱讀全文

與java文件輸入輸出流相關的資料

熱點內容
編程用蘋果 瀏覽:659
51虛擬機的文件管理在哪裡 瀏覽:13
win10系統有沒有便簽 瀏覽:722
java引用傳遞和值傳遞 瀏覽:109
oracle下載安裝教程 瀏覽:854
php篩選資料庫 瀏覽:830
怎麼用手機看wlan密碼 瀏覽:745
奧維地圖導入的文件在哪裡 瀏覽:364
sdltrados2014教程 瀏覽:43
培訓制度文件在哪裡找 瀏覽:601
勒索病毒防疫工具 瀏覽:861
win10c不能打開 瀏覽:375
xfplay影音先鋒蘋果版 瀏覽:597
兩個文件打開兩個word 瀏覽:921
蘋果6s桌面圖標輕微抖動 瀏覽:326
如何刪除手機中看不見的臨時文件 瀏覽:469
安卓412原生鎖屏apk 瀏覽:464
書加加緩存文件在哪裡 瀏覽:635
dock是word文件嗎 瀏覽:267
社保公司新辦去哪個網站下載資料 瀏覽:640

友情鏈接