你好,java的API中提供了用于對(duì)象輸入輸出文件的操作,實(shí)例代碼如下:
我們提供的服務(wù)有:網(wǎng)站設(shè)計(jì)、成都網(wǎng)站設(shè)計(jì)、微信公眾號(hào)開(kāi)發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、江陽(yáng)ssl等。為上千家企事業(yè)單位解決了網(wǎng)站和推廣的問(wèn)題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的江陽(yáng)網(wǎng)站制作公司
定義單詞類如下(注意:你定義的類要實(shí)現(xiàn)Serializable接口)
public class Words implements Serializable {
private int size;
private String[] words;
public Words(){};
public Words(String...strs){
this.words = strs;
this.size = strs.length;
}
@Override
public String toString() {
return "Words{" +
"size=" + size +
", words=" + Arrays.toString(words) +
'}';
}
}
2. 對(duì)象輸入輸出api測(cè)試類
public class ObjIOTest {
public static void main(String[] args) {
String path = "d:/myIOTest.txt";
ObjIOTest objIOTest = new ObjIOTest();
Words words = new Words("hello", "my", "dear", "friend");
try {
objIOTest.writeObject(path,words);
Words wordsFromFile = (Words)objIOTest.readObject(path);
System.out.println(wordsFromFile.toString());
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
}
//java serialize a object to file
public void writeObject(String path,Object map) throws IOException{
File f=new File(path);
FileOutputStream out=new FileOutputStream(f);
ObjectOutputStream objwrite=new ObjectOutputStream(out);
objwrite.writeObject(map);
objwrite.flush();
objwrite.close();
}
// read the object from the file
public Object readObject(String path) throws IOException, ClassNotFoundException{
FileInputStream in=new FileInputStream(path);
ObjectInputStream objread=new ObjectInputStream(in);
Object map=objread.readObject();
objread.close();
return map;
}
}
把兩段代碼拷貝到一個(gè)包下即可運(yùn)行了,希望您的問(wèn)題得到解答
FileInputSream類
FileInputStream(String name)
FileInputStream(File file)
第一個(gè)構(gòu)造方法是用給定的文件名name創(chuàng)建一個(gè)FileInputStream對(duì)象
第二個(gè)方法使用File對(duì)象創(chuàng)建FileInputStream對(duì)象
使用文件輸入流讀取文件
例如
FileInputStream istream=new FileInputStream(“myfile.dat”);
或
File f=new File(“myfile.dat”);
FileInputStream istream =new FileInputStream(f);
處理IO異常
Try{
FileInputStream istream=new FileInputStream(“myfile.dat”);
}
Catch(IOException e){}
從輸入流中讀取字節(jié)
Int read();從輸入流中順序讀取源中的單個(gè)字節(jié)數(shù)據(jù),返回字節(jié)值(0~255之間的一個(gè)整數(shù)),如果到達(dá)源的末尾,則返回-1
Read方法還可以吧多個(gè)字節(jié)讀入到字節(jié)數(shù)組中:
Int read(byte b[]);
Int read(byte b[],int off,int len);
關(guān)閉流
使用close();
FileOutputStream類
該類提供了基本的文件寫(xiě)入能力,除了從OutputStream類繼承來(lái)的方法外,F(xiàn)ileOutputStream類還提供了兩個(gè)構(gòu)造方法:
FileOutputStream(String name)
FileOutputStream(File file)
第一個(gè)構(gòu)造方法,給指定的文件名name創(chuàng)建一個(gè)FileOutputStreak對(duì)象
第二個(gè)構(gòu)造方法,使用File對(duì)象創(chuàng)建FileOutputStream對(duì)象
可以使用write()方法把字節(jié)寫(xiě)入到輸出流到達(dá)目的地
Write的格式:
Public void write(byte b[]) 其功能就是把b.length個(gè)字節(jié)到輸出流
Public void write(byte b[],int off,int len)給定字節(jié)數(shù)組中,偏移off處寫(xiě)入len個(gè)字節(jié)到輸出流
FileOutputStream流順序的寫(xiě)文件,只要不關(guān)閉流,每次調(diào)用write方法就順序地向輸出流寫(xiě)入內(nèi)容,直到流被關(guān)閉。
以上代碼見(jiàn)hyh.io--File/Fileinputstream/Fileoutputsream
以上輸入輸出流容易出現(xiàn)的問(wèn)題就是:漢字亂碼
FileReader類和FileWriter類
與FileInputStream和FileOutputStream字節(jié)流相對(duì)應(yīng)的是FileReader和FileWriter字符流,其分別是Reader和Writer的子類,構(gòu)造方法如下:
FileReader(String filename)
FileWriter(String filename)
使用字節(jié)讀取文件時(shí),字節(jié)流不能直接操作Unicode字符,所以Java提供字符流。由于漢字在文件中占用了兩個(gè)字節(jié),如果使用字節(jié)流,讀取不當(dāng)會(huì)出現(xiàn)亂碼現(xiàn)象,采用字符流就可以避免這個(gè)現(xiàn)象,因?yàn)樵赨nicode字符中,一個(gè)漢字被看做一個(gè)字符。
如果需要每次讀取一行數(shù)據(jù),F(xiàn)ileReader類沒(méi)有提供這樣的方法,所以必須把這個(gè)流再接到另外一個(gè)流傷,從后面的流中讀取一行數(shù)據(jù)。Java為其命名為BufferedReader類,構(gòu)造方法:
BufferedReader(Reader in)
BufferedReader流能夠讀取文本行,方法是readLine()
通過(guò)向BufferedReader傳遞一個(gè)Reader對(duì)象,來(lái)創(chuàng)建一個(gè)BufferedReader對(duì)象,
FileReader inone=new FileReader(“Student.txt”);
BufferedReader intwo=BufferedReader(inone);
類似的可以將BufferedWriter流和FileWriter流連接在一起,然后使用BufferedWriter流將數(shù)據(jù)寫(xiě)到目的地,
FileWriter tofile=new FileWriter(”hello.txt”);
BufferedWriter out=BufferedWriter(tofile)
然后out使用BufferedReader類的方法:
Write(String s,int off,int len)把字符串s寫(xiě)入到文件中,off是s開(kāi)始處的偏移量,len是寫(xiě)入的字符數(shù)量
代碼詳情見(jiàn)hyh.javaio.FileReaderandWriter
代碼總結(jié):FileReader和FileWriter可以進(jìn)行漢字的讀取和寫(xiě)入
BufferedReader有讀取行的功能,readLine()
RandomAccessFile類
RandomAccessFile類創(chuàng)建的流指向既可以作為源也可以作為目的地。換句話說(shuō),當(dāng)想對(duì)一個(gè)文件進(jìn)行讀寫(xiě)操作時(shí),可以創(chuàng)建一個(gè)指向該文件的RandomAccessFile流
構(gòu)造方法:
RandomAccessFile(String name,String mode)參數(shù)name用來(lái)確定一個(gè)文件名,給出流的源。參數(shù)mode取r或者rw(只讀或者讀寫(xiě)),決定對(duì)文件的訪問(wèn)權(quán)限。
RandomAccessFile(File file,String mode)參數(shù)file是一個(gè)File對(duì)象,給出源,同時(shí)也是目的地。參數(shù)mode決定訪問(wèn)權(quán)限。
該類中有一個(gè)seek(long a)方法,用來(lái)定位RandomAccessFile流的讀寫(xiě)位置。參數(shù)a確定讀寫(xiě)位置距離文件開(kāi)頭的字節(jié)個(gè)數(shù)。
還可以調(diào)用getFilePointer()方法或者流當(dāng)前的讀寫(xiě)位置
類方法P280:
關(guān)閉文件
獲取讀寫(xiě)位置等。。。。。。。。
使用RandomAccessFile流實(shí)現(xiàn)一個(gè)通訊錄的錄入與顯示系統(tǒng)
見(jiàn)RandomAccessFile
數(shù)據(jù)流P284
數(shù)組流P286
對(duì)象流P288
序列化與對(duì)象克隆P290
文件鎖FileLockP293
Process類中的流P295
帶進(jìn)度條的輸入流P298(這個(gè)是我自己整理的一部分的學(xué)習(xí)筆記,教材為Java2實(shí)用教程第三版(耿祥義編著),因?yàn)槭褂昧藈ord進(jìn)行整理,首字母大寫(xiě)忘記取消和一些代碼在myeclipse上,但是不妨礙你查看)
Java中的流是個(gè)抽象的概念,當(dāng)程序需要從某個(gè)數(shù)據(jù)源讀入數(shù)據(jù)的時(shí)候,就會(huì)開(kāi)啟一個(gè)數(shù)據(jù)流,數(shù)據(jù)源可以是文件、內(nèi)存或網(wǎng)絡(luò)等等。相反地,需要寫(xiě)出數(shù)據(jù)到某個(gè)數(shù)據(jù)源目的地的時(shí)候,也會(huì)開(kāi)啟一個(gè)數(shù)據(jù)流,這個(gè)數(shù)據(jù)源目的地也可以是文件、內(nèi)存或網(wǎng)絡(luò)等等\x0d\x0a\x0d\x0aJava中的流可以從不同的角度進(jìn)行分類:\x0d\x0a按照流的方向不同:分為輸入流和輸出流。\x0d\x0a按照處理數(shù)據(jù)單位的不同:分為字節(jié)流(8位)和字符流(16位)。\x0d\x0a按照功能不同:分為節(jié)點(diǎn)流和處理流。\x0d\x0a節(jié)點(diǎn)流:是可以從一個(gè)特定的數(shù)據(jù)源(節(jié)點(diǎn))讀寫(xiě)數(shù)據(jù)的流(例如文件,內(nèi)存)。就像是一條單一的管子接到水龍頭上開(kāi)始放水。\x0d\x0a處理流:是“連接”在已經(jīng)存在的流(節(jié)點(diǎn)流或處理流)之上,通過(guò)對(duì)數(shù)據(jù)的處理為程序提供更為強(qiáng)大的讀寫(xiě)功能。就像在已經(jīng)接了一條管子(節(jié)點(diǎn)流)的基礎(chǔ)上,又套上幾個(gè)更粗,具有特殊功能的管子(處理流)對(duì)流出的水進(jìn)一步的處理。\x0d\x0a四種基本流InputStream,OutputStream,Reader,Writer又分別有更具體的子類,分為文件流,緩沖流,數(shù)據(jù)流,轉(zhuǎn)換流,Print流,Object流等,都分別有特定的功能或用來(lái)操作特定的數(shù)據(jù)
io。就是操作文件嘛。在公司經(jīng)常有用到的。
現(xiàn)在是講例子1:
//創(chuàng)建一個(gè)新文件
importjava.io.*;
classhello{
publicstaticvoidmain(String[] args) {
File f=newFile("D:\\hello.txt");
try{
f.createNewFile();
}catch(Exception e) {
e.printStackTrace();
}
}
}
//程序運(yùn)行之后,在d盤(pán)下會(huì)有一個(gè)名字為hello.txt的文件。
例子2:
//File類的兩個(gè)常量
importjava.io.*;
classhello{
publicstaticvoidmain(String[] args) {
System.out.println(File.separator);
System.out.println(File.pathSeparator);
}
}
運(yùn)行結(jié)果:\
;
現(xiàn)在用常量來(lái)改動(dòng)寫(xiě)上面的代碼:
importjava.io.*;
classhello{
publicstaticvoidmain(String[] args) {
String fileName="D:"+File.separator+"hello.txt";
File f=newFile(fileName);
try{
f.createNewFile();
}catch(Exception e) {
e.printStackTrace();
}
}
}
用這些,建議使用常量,因?yàn)榇a寫(xiě)的少了。
案例3:
//刪除一個(gè)文件
importjava.io.*;
classhello{
publicstaticvoidmain(String[] args) {
String fileName="D:"+File.separator+"hello.txt";
File f=newFile(fileName);
if(f.exists()){
f.delete();
}else{
System.out.println("文件不存在");
}
}
}
案例4:創(chuàng)建一個(gè)文件夾
importjava.io.*;
classhello{
publicstaticvoidmain(String[] args) {
String fileName="D:"+File.separator+"hello";
File f=newFile(fileName);
f.mkdir();
}
}
案例5:列出指定目錄的全部文件(包括隱藏文件):
importjava.io.*;
classhello{
publicstaticvoidmain(String[] args) {
String fileName="D:"+File.separator;
File f=newFile(fileName);
String[] str=f.list();
for(inti =0; i str.length; i++) {
System.out.println(str[i]);
}
}
}
大概的簡(jiǎn)單的東西,就這些了吧。你自己好好看看吧,歡迎追問(wèn)。
前兩個(gè)讀取到的是import的前面兩個(gè)字符的(就是i和m,這里打印出來(lái)的是它們的unicode編碼),后面就繼續(xù)讀,然后你的循環(huán)里面寫(xiě)了i=10,所以讀取10個(gè)字符以后就跳出循環(huán)了,所以只讀了后面10個(gè)字符
import?java.io.File;
import?java.io.FileInputStream;
import?java.io.FileNotFoundException;
import?java.io.FileOutputStream;
import?java.io.IOException;
import?java.io.InputStreamReader;
import?java.io.OutputStreamWriter;
public?class?InputStreamReaderTest
{
public?static?void?main(String[]?args)
{
try
{
File?file=new?File("F:\\io\\abc.txt");
FileOutputStream?fos=new?FileOutputStream(file);
OutputStreamWriter?osw=new?OutputStreamWriter(fos);
osw.write('大');
osw.write('家');
osw.write('好');
osw.close();
FileInputStream?fis=new?FileInputStream(file);
InputStreamReader?isr=new?InputStreamReader(fis);
System.out.println((char)isr.read());
System.out.println((char)isr.read());
System.out.println((char)isr.read());
isr.close();
}
catch?(FileNotFoundException?e)
{
System.out.println("操作的文件不存在");
}
catch(IOException?e)
{
System.out.println("發(fā)生IO操作異常");
}
}
}
分享題目:java中流的代碼 java 流 編碼
本文網(wǎng)址:http://m.kartarina.com/article30/hggppo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供ChatGPT、網(wǎng)站內(nèi)鏈、服務(wù)器托管、做網(wǎng)站、虛擬主機(jī)、定制網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)