實驗10 流與文件
一、實驗目的
1.?理解數據流的概念
2.?理解Java流的層次結構
3.?理解文件的概念
二、實驗要求
1.?掌握字節流的基本使用方法
2.?掌握字符流的基本使用方法
3.?能夠創建、讀寫、更新文件???
三、實驗內容
(一)使用標準數據流的應用程序
標準數據流指在字符方式下(如DOS 提示符)程序與系統進行輸入輸出的方式,鍵盤和顯示器屏幕是標準輸入輸出設備,數據輸入的起點為鍵盤,數據輸出的終點是屏幕,輸出的數據可以在屏幕上顯示出來。
1.?程序功能:將鍵盤上輸入的字符在屏幕上顯示出來
2.?編寫KY10_1.java 程序文件,源代碼如下。
class KY10_1{
public static void main(String[] args) throws java.io.IOException {
byte buffer[]=new byte[10];
System.out.println("從鍵盤輸入不超過10 個字符,按回車鍵結束輸入:");
int count =System.in.read(buffer);//讀取輸入的字符并存放在緩沖區buffer 中
System.out.println("保存在緩沖區buffer 中元素的個數為:"+count);
System.out.println("buffer 中各元素的值為:");
for (int i=0;iSystem.out.print(" "+ buffer[i]);//在屏幕上顯示buffer 元素的值
}
System.out.println();
System.out.println("輸出buffer 字符元素:");
System.out.write(buffer, 0, buffer.length);
}
}
3.?編譯、運行KY10_1.java 文件。
(二)使用文件輸入輸出流的應用程序
1.?程序功能:將保存在本地機當前文件夾中的KY10_2.HTML 文本文件的內容在屏幕上顯示出來,然后將其另存為KY10_2.txt 文件。
2.?編寫KY10_2.java 程序文件,源代碼如下
import java.io.*;
public class KY5_4 {
public static void main(String[] args) throws IOException {
FileReader in=new FileReader("KY5_1.HTML");//建立文件輸入流
BufferedReader bin=new BufferedReader(in);//建立緩沖輸入流
FileWriter out=new FileWriter(" KY5_1.txt",true);//建立文件輸出流
String str;
while ((str=bin.readLine())!=null) {
//將緩沖區內容通過循環方式逐行賦值給字符串str
System.out.println(str);//在屏幕上顯示字符串str
out.write(str+"\n");//將字符串str 通過輸出流寫入KY5_1.txt 中
}
in.close();
out.close();
}
}
3.?編譯、運行程序
(三)使用隨機文件類的應用程序
使用文件輸入類FileReader 只能將文件內容全部讀入。如果要選擇讀入文件的內容,可使用隨機文件類RandomAccessFile。
1.?程序功能:建立數據流,通過指針有選擇的讀入文件內容。
2.?編寫KY10_3.java 程序文件,源代碼如下。
import java.io.*;
class KY10_3 {
public static void main(String args[]) {
String str[]={"First line\n","Second line\n","Last line\n"};
try {
RandomAccessFile rf=new RandomAccessFile("KY5_5.txt", "rw");
System.out.println("\n 文件指針位置為:"+rf.getFilePointer());
System.out.println("文件的長度為:"+rf.length());
rf.seek(rf.length());
System.out.println("文件指針現在的位置為:"+rf.getFilePointer());
for (int i=0; i<3; i++)
rf.writeChars(str[i]); // 字符串轉為字節串添加到文件末尾87
rf.seek(10);
System.out.println("\n 選擇顯示的文件內容:");
String s;
while ((s=rf.readLine())!=null)
System.out.println(s);
rf.close();
}
catch (FileNotFoundException fnoe) {}
catch (IOException ioe) {}
}
}
3.?編譯并運行程序
(四)使用數據輸入輸出流與文件輸入輸出流類的應用程序
使用數據輸入流DataOutputStream 和數據輸出流DataInputStream 可以讀取或寫入任何Java 類型的數據,不用關心它們的實際長度是多少字節。一般與文件輸入流FileInputStream 和輸出流類
FileOutputStream 一起使用。
1.?程序功能:將整型數據和字符串對象通過數據輸出流寫到文件中。將文件中的整型數據和字符串對象通過數據輸出流讀出,并在屏幕上顯示文件中的內容。
2.?編寫KY10_4.java 程序文件,源代碼如下。
import java.io.*;
public class KY10_4
{
public static void main(String arg[])
{
try
{ //添加方式創建文件輸出流
FileOutputStream fout = new FileOutputStream("KY5_6.txt",true);
DataOutputStream dout = new DataOutputStream(fout);
dout.writeInt(1);
dout.writeChars("羅馬"+"\n");
dout.writeInt(2);
dout.writeChars("北京"+"\n");
dout.close();
}
catch (IOException ioe){}
try
{
FileInputStream fin = new FileInputStream("KY5_6.txt");
DataInputStream din = new DataInputStream(fin);
int i = din.readInt();
while (i!=-1) //輸入流未結束時,輸入流結束時i 為-1
{
System.out.print(i+" ");
char ch ;
while ((ch=din.readChar())!='\n') //字符串未結束時
System.out.print(ch);
System.out.println();
i = din.readInt();
}
din.close();
}
catch (IOException ioe){}
}
}
3.?編譯并運行程序
(五)使用對象輸入輸出流的應用程序
使用對象流可以直接寫入或讀取一個對象。由于一個類的對象包含多種信息,為了保證從對象流中能夠讀取到正確的對象,因此要求所有寫入對象流的對象都必須是序列化的對象。一個類如果實現了Serializable 接口,那么這個類的對象就是序列化的對象。Serializable 接口沒有方法,實現該接口的類不需要實現額外的方法。
1.?程序功能:保存對象信息到文件,并將文件中的對象信息顯示出來。
2.?編寫KY10_5.java 程序文件,源代碼如下。
import java.io.*;
public class KY5_7 implements Serializable //序列化接口
{
int bh=1;int nl=21;
String xm;
KY5_7(int bh,String xm,int nl)//構造方法
{
this.bh = bh;
this.xm = xm;
this.nl = nl;
}
KY10_5()//構造方法
{
this(0,"",21);
}
void save(String fname)//保存到文件中的方法
{
try
{
FileOutputStream fout = new FileOutputStream(fname);//輸出文件流
ObjectOutputStream out = new ObjectOutputStream(fout);//輸出對象流
out.writeObject(this); //寫入對象
out.close();
}
catch (FileNotFoundException fe){}
catch (IOException ioe){}
}
void display(String fname)//顯示文件中對象信息的方法
{
try
{
FileInputStream fin = new FileInputStream(fname);//輸入文件流
ObjectInputStream in = new ObjectInputStream(fin);//輸入對象流
KY10_5 OO = (KY5_7)in.readObject(); //讀取對象
System.out.println(" 類名: "+OO.getClass().getName()+"
"+OO.getClass().getInterfaces()[0]);
System.out.println(" "+OO.bh+" "+OO.xm+" "+OO.nl);
in.close();
}
catch (FileNotFoundException fe){}
catch (IOException ioe){}
catch (ClassNotFoundException ioe) {}
}
public static void main(String arg[])
{
String fname = "KY5_7.obj";
KY10_5 O1= new KY5_7(1,"張馳",14);
O1.save(fname);
O1.display(fname);
}
}
3.?編譯并運行程序
一、實驗目的
1.?理解數據流的概念
2.?理解Java流的層次結構
3.?理解文件的概念
二、實驗要求
1.?掌握字節流的基本使用方法
2.?掌握字符流的基本使用方法
3.?能夠創建、讀寫、更新文件???
三、實驗內容
(一)使用標準數據流的應用程序
標準數據流指在字符方式下(如DOS 提示符)程序與系統進行輸入輸出的方式,鍵盤和顯示器屏幕是標準輸入輸出設備,數據輸入的起點為鍵盤,數據輸出的終點是屏幕,輸出的數據可以在屏幕上顯示出來。
1.?程序功能:將鍵盤上輸入的字符在屏幕上顯示出來
2.?編寫KY10_1.java 程序文件,源代碼如下。
class KY10_1{
public static void main(String[] args) throws java.io.IOException {
byte buffer[]=new byte[10];
System.out.println("從鍵盤輸入不超過10 個字符,按回車鍵結束輸入:");
int count =System.in.read(buffer);//讀取輸入的字符并存放在緩沖區buffer 中
System.out.println("保存在緩沖區buffer 中元素的個數為:"+count);
System.out.println("buffer 中各元素的值為:");
for (int i=0;i
}
System.out.println();
System.out.println("輸出buffer 字符元素:");
System.out.write(buffer, 0, buffer.length);
}
}
3.?編譯、運行KY10_1.java 文件。
(二)使用文件輸入輸出流的應用程序
1.?程序功能:將保存在本地機當前文件夾中的KY10_2.HTML 文本文件的內容在屏幕上顯示出來,然后將其另存為KY10_2.txt 文件。
2.?編寫KY10_2.java 程序文件,源代碼如下
import java.io.*;
public class KY5_4 {
public static void main(String[] args) throws IOException {
FileReader in=new FileReader("KY5_1.HTML");//建立文件輸入流
BufferedReader bin=new BufferedReader(in);//建立緩沖輸入流
FileWriter out=new FileWriter(" KY5_1.txt",true);//建立文件輸出流
String str;
while ((str=bin.readLine())!=null) {
//將緩沖區內容通過循環方式逐行賦值給字符串str
System.out.println(str);//在屏幕上顯示字符串str
out.write(str+"\n");//將字符串str 通過輸出流寫入KY5_1.txt 中
}
in.close();
out.close();
}
}
3.?編譯、運行程序
(三)使用隨機文件類的應用程序
使用文件輸入類FileReader 只能將文件內容全部讀入。如果要選擇讀入文件的內容,可使用隨機文件類RandomAccessFile。
1.?程序功能:建立數據流,通過指針有選擇的讀入文件內容。
2.?編寫KY10_3.java 程序文件,源代碼如下。
import java.io.*;
class KY10_3 {
public static void main(String args[]) {
String str[]={"First line\n","Second line\n","Last line\n"};
try {
RandomAccessFile rf=new RandomAccessFile("KY5_5.txt", "rw");
System.out.println("\n 文件指針位置為:"+rf.getFilePointer());
System.out.println("文件的長度為:"+rf.length());
rf.seek(rf.length());
System.out.println("文件指針現在的位置為:"+rf.getFilePointer());
for (int i=0; i<3; i++)
rf.writeChars(str[i]); // 字符串轉為字節串添加到文件末尾87
rf.seek(10);
System.out.println("\n 選擇顯示的文件內容:");
String s;
while ((s=rf.readLine())!=null)
System.out.println(s);
rf.close();
}
catch (FileNotFoundException fnoe) {}
catch (IOException ioe) {}
}
}
3.?編譯并運行程序
(四)使用數據輸入輸出流與文件輸入輸出流類的應用程序
使用數據輸入流DataOutputStream 和數據輸出流DataInputStream 可以讀取或寫入任何Java 類型的數據,不用關心它們的實際長度是多少字節。一般與文件輸入流FileInputStream 和輸出流類
FileOutputStream 一起使用。
1.?程序功能:將整型數據和字符串對象通過數據輸出流寫到文件中。將文件中的整型數據和字符串對象通過數據輸出流讀出,并在屏幕上顯示文件中的內容。
2.?編寫KY10_4.java 程序文件,源代碼如下。
import java.io.*;
public class KY10_4
{
public static void main(String arg[])
{
try
{ //添加方式創建文件輸出流
FileOutputStream fout = new FileOutputStream("KY5_6.txt",true);
DataOutputStream dout = new DataOutputStream(fout);
dout.writeInt(1);
dout.writeChars("羅馬"+"\n");
dout.writeInt(2);
dout.writeChars("北京"+"\n");
dout.close();
}
catch (IOException ioe){}
try
{
FileInputStream fin = new FileInputStream("KY5_6.txt");
DataInputStream din = new DataInputStream(fin);
int i = din.readInt();
while (i!=-1) //輸入流未結束時,輸入流結束時i 為-1
{
System.out.print(i+" ");
char ch ;
while ((ch=din.readChar())!='\n') //字符串未結束時
System.out.print(ch);
System.out.println();
i = din.readInt();
}
din.close();
}
catch (IOException ioe){}
}
}
3.?編譯并運行程序
(五)使用對象輸入輸出流的應用程序
使用對象流可以直接寫入或讀取一個對象。由于一個類的對象包含多種信息,為了保證從對象流中能夠讀取到正確的對象,因此要求所有寫入對象流的對象都必須是序列化的對象。一個類如果實現了Serializable 接口,那么這個類的對象就是序列化的對象。Serializable 接口沒有方法,實現該接口的類不需要實現額外的方法。
1.?程序功能:保存對象信息到文件,并將文件中的對象信息顯示出來。
2.?編寫KY10_5.java 程序文件,源代碼如下。
import java.io.*;
public class KY5_7 implements Serializable //序列化接口
{
int bh=1;int nl=21;
String xm;
KY5_7(int bh,String xm,int nl)//構造方法
{
this.bh = bh;
this.xm = xm;
this.nl = nl;
}
KY10_5()//構造方法
{
this(0,"",21);
}
void save(String fname)//保存到文件中的方法
{
try
{
FileOutputStream fout = new FileOutputStream(fname);//輸出文件流
ObjectOutputStream out = new ObjectOutputStream(fout);//輸出對象流
out.writeObject(this); //寫入對象
out.close();
}
catch (FileNotFoundException fe){}
catch (IOException ioe){}
}
void display(String fname)//顯示文件中對象信息的方法
{
try
{
FileInputStream fin = new FileInputStream(fname);//輸入文件流
ObjectInputStream in = new ObjectInputStream(fin);//輸入對象流
KY10_5 OO = (KY5_7)in.readObject(); //讀取對象
System.out.println(" 類名: "+OO.getClass().getName()+"
"+OO.getClass().getInterfaces()[0]);
System.out.println(" "+OO.bh+" "+OO.xm+" "+OO.nl);
in.close();
}
catch (FileNotFoundException fe){}
catch (IOException ioe){}
catch (ClassNotFoundException ioe) {}
}
public static void main(String arg[])
{
String fname = "KY5_7.obj";
KY10_5 O1= new KY5_7(1,"張馳",14);
O1.save(fname);
O1.display(fname);
}
}
3.?編譯并運行程序
評論
查看更多