導航:首頁 > 文件教程 > 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文件輸入輸出流相關的資料

熱點內容
ps3文件分割視頻 瀏覽:280
微信圖片一鍵轉發軟體 瀏覽:331
如何判斷s200plc編程電纜 瀏覽:691
太原編程培訓班哪個好 瀏覽:171
樹葉吹奏教程 瀏覽:6
社交app帶來了哪些社會問題 瀏覽:394
如何安裝愛寶8800數據採集器 瀏覽:712
文件保存了怎麼找不到了 瀏覽:476
彩票網站怎麼辨真假 瀏覽:840
pr找不到該文件 瀏覽:963
java移除panel 瀏覽:354
jsp填充jsp 瀏覽:166
海關外貿大數據在哪裡查 瀏覽:381
思特奇java筆試題 瀏覽:121
葫蘆俠在手機中的文件名 瀏覽:813
plc編程應該怎麼收錢 瀏覽:584
c語言中源文件由什麼組成 瀏覽:890
linuxhttpdphp配置文件 瀏覽:607
拆單數據要怎麼保存 瀏覽:17
mac電腦怎樣壓縮文件到100m 瀏覽:645

友情鏈接