实验4 文件IO.docx

上传人:b****8 文档编号:27955128 上传时间:2023-07-06 格式:DOCX 页数:27 大小:202.47KB
下载 相关 举报
实验4 文件IO.docx_第1页
第1页 / 共27页
实验4 文件IO.docx_第2页
第2页 / 共27页
实验4 文件IO.docx_第3页
第3页 / 共27页
实验4 文件IO.docx_第4页
第4页 / 共27页
实验4 文件IO.docx_第5页
第5页 / 共27页
点击查看更多>>
下载资源
资源描述

实验4 文件IO.docx

《实验4 文件IO.docx》由会员分享,可在线阅读,更多相关《实验4 文件IO.docx(27页珍藏版)》请在冰豆网上搜索。

实验4 文件IO.docx

实验4文件IO

实验4文件IO

一、实验目的1

二、实验内容1

1、关于File类的预备知识1

1.1File的构造方法2

1.2File的部分实例方法2

2、练习java.io.File类4

3、用java.io.PrintWriter类将数据输出到文本文件。

4

4、用java.util.Scanner从文本文件读入数据。

5

5、关于流和四大根类的预备知识6

6、用Reader/Writer的子类读写文本文件8

6.1Reader,FileReader,Writer,FileWriter的介绍8

6.2用FileWriter和FileReader读写文本文件12

7、用InputStream/OutputStream的子类读写文本文件12

7.1InputStream和OutputStream的子类12

7.2用FileInputStream和FileOutputStream读写二进制文件14

7.3用DataInputStream和DataOutputStream读写二进制文件16

7.4用BufferedInputStream和BufferedOutputStream读写二进制文件18

一、实验目的

1、掌握java语言的文件类FILE,能获取文件属性

2、掌握字符流IO的Reader/Writer及子类

3、掌握字节流IO的InputStream/OutputStream及子类

二、实验内容

1、关于File类的预备知识

一个File对象代表了一个文件。

这个文件可能存在,也可能不存在。

如果存在,那么利用该对象的方法,可以获取对应文件的属性,但不能读写文件。

注意:

目录文件(文件夹)和普通文件都是文件。

一个目录文件的内容是其它文件的属性。

1.1File的构造方法

构造方法摘要

File(File parent,String child)

          根据parent抽象路径名和child路径名字符串创建一个新File实例。

例如Filetextfile=newFile(“text”);

Filefile=newFile(textfile,“a.txt”);

File(String pathname)

          通过将给定路径名字符串转换成抽象路径名来创建一个新File实例。

例如Filefile=newFile(“text/a.txt”);

File(String parent,String child)

          根据parent路径名字符串和child路径名字符串创建一个新File实例。

例如Filefile=newFile(“text”,“a.txt”);

File(URI uri)

          通过将给定的file:

URI转换成一个抽象路径名来创建一个新的File实例。

只能是本地文件资源

URIu=newURI("file:

///e:

/javaprog/text/a.txt");

Filefile=newFile(u);

1.2File的部分实例方法

获得文件信息

StringgetName();//获得文件(目录)名

StringgetAbsolutePath() //获得绝对路径

StringgetParent();//获得上级目录名

获得文件属性

booleanexists();//是否存在

booleancanWrite();//是否可写

booleancanRead();//是否可读

booleanisFile();//是否是一个文件

booleanisDirectory();//是否是一个目录

longlastModified();//文件最后修改日期

longlength();//文件长度(字节数长度)

目录操作

–booleancreateNewFile();//创建该文件对象表示的普通文件。

不能创建目录文件。

且文件路径中包含的文件夹必须存在,否则失败。

比如要创建d:

\a\t.txt,如果a不存在,会失败。

–booleanmkdir();//创建当前文件对象表示的目录。

比如创建d:

\a\b,如果a目录不存在,会失败

–booleanmkdirs();//创建当前文件对象表示的目录。

比如创建d:

\a\b,如果a目录不存在,会自动创建

–booleandelete();//删除当前文件对象表示的文件(可以是目录文件)。

如果删除的是文件夹,则该文件夹必须为空。

如果需要删除一个非空的文件夹,则需要首先删除该文件夹内部的每个文件和文件夹,然后在可以删除,这个需要书写一定的逻辑代码实现。

如果当前文件对象是目录文件

String[]list();//求出目录里所有的文件或目录名

File[]listFiles();//求目录里所有的文件对象

2、练习java.io.File类

在D:

盘建立文件夹t,再在t下建立a.txt。

运行下面的程序。

importjava.io.*;

publicclassTestFile{

publicstaticvoidmain(String[]s){

Filefile=newFile("D:

/t/a.txt");//Windows下,字符串也可以是D:

\\t\\a.txt

System.out.println("它存在吗?

"+file.exists());

System.out.println("它能读吗?

"+file.canRead());

System.out.println("它能写吗?

"+file.canWrite());

System.out.println("它是目录文件吗?

"+file.isDirectory());

System.out.println("它是普通文件吗?

"+file.isFile());

System.out.println("它用绝对路径吗?

"+file.isAbsolute());

System.out.println("它的绝对路径是?

"+file.getAbsolutePath());

System.out.println("它的相对路径是?

"+file.getPath());

System.out.println("它的文件名是?

"+file.getName());

System.out.println("它是隐藏的吗?

"+file.isHidden());

System.out.println("它最近的修改时间是?

"+newjava.util.Date(file.lastModified()));

System.out.println("文件名改为b.txt成功了吗?

"+file.renameTo(newFile("b.txt")));

}

}

3、用java.io.PrintWriter类将数据输出到文本文件。

构造方法摘要

PrintWriter(File file)

          使用指定文件创建不具有自动行刷新的新PrintWriter。

PrintWriter(File file,String csn)

          创建具有指定文件和字符集且不带自动刷行新的新PrintWriter。

PrintWriter(OutputStream out)

          根据现有的OutputStream创建不带自动行刷新的新PrintWriter。

PrintWriter(OutputStream out,boolean autoFlush)

          通过现有的OutputStream创建新的PrintWriter。

PrintWriter(String fileName)

          创建具有指定文件名称且不带自动行刷新的新PrintWriter。

PrintWriter(String fileName,String csn)

          创建具有指定文件名称和字符集且不带自动行刷新的新PrintWriter。

PrintWriter(Writer out)

          创建不带自动行刷新的新PrintWriter。

PrintWriter(Writer out,boolean autoFlush)

          创建新PrintWriter。

(1)首先为文本文件创建一个PrintWriter对象:

PrintWriteroutput=newPrintWriter(“text/a.txt”);

若已经有了文件对象file,也可以以它为参数来构建对象:

Filefile=newFile(“text/a.txt”);

PrintWriteroutput=newPrintWriter(file);

(2)然后,用对象的print、println、printf、write等方法写文件

运行下面的程序,然后查看你的工作目录下的a.txt文件。

importjava.io.*;

publicclassWriteFileWithPrintWriter{

publicstaticvoidmain(String[]arguments)throwsException{

PrintWriteroutput=newPrintWriter("a.txt");//输出到当前目录下的a.txt

output.print("重庆\t");

output.printf("西南大学\t%d\t",82);

output.write("良好");//write()方法可以写字符、字符数组、字符串

output.println();

output.print("成都\t");

output.printf("四川大学\t%d\t",84);

output.write("良好");

output.println();

output.close();

}

}

之所以可能抛出异常,是由于根据字符串,可能无法创建文件。

比如””和“a?

.txt”这样的字符串。

4、用java.util.Scanner从文本文件读入数据。

键盘输入Scannerinput=newScanner(System.in);

文件输入

Filefile=newFile(“text/b.txt”);

Scannerinput=newScanner(file);

然后用input.next()input.nextInt()input.nextLine()等来读入数据

运行下面的程序。

importjava.io.File;

importjava.util.Scanner;

publicclassReadFileWithScanner{

publicstaticvoidmain(String[]s)throwsException{

Filefile=newFile("a.txt");//将当前目录下的a.txt作为输入源

if(!

file.exists()){

System.out.println("文件不存在");

System.exit(0);

}

Scannerinput=newScanner(file);

while(input.hasNext()){

Stringcity=input.next();

Stringuniversity=input.next();

intscore=input.nextInt();

System.out.println(city+","+university+","+score+input.nextLine());

}

input.close();

}

}

5、关于流和四大根类的预备知识

流是对数据以及读写操作的封装。

不限于文件流。

在之前大家接触过System.in和System.out,它们分别是标准输入流和标准输出流。

☐java.io包中的流主要分为

⏹字节流:

以8位字节形式读写(InputStream/OutputStream)

⏹字符流:

以16位字符形式读写(Reader/Writer)。

从输入流中读数据

openastream

whilemoreinformation{

readinformation

}

Closethestream

 

写到输出流

openastream

whilemoreinformation{

writeinformation

}

closethestream

四大抽象根类:

字符输入流Reader,字符输出流Writer,字节输入流InputStream,字节输出流OutputStream

操作方向

最小操作单位

从文件输入

输出到文件

字符(unicode16位)

读文本文件

根类Reader

写到文本文件

根类Writer

字节(byte8位)

读二进制文件

根类InputStream

写到二进制文件

根类OutputStream

字符流和字节流的区别

InputStream/OutputStream和Reader/Writer都直接继承自Java的根类Object,它们各自形成一个独立的继承体系。

6、用Reader/Writer的子类读写文本文件

6.1Reader,FileReader,Writer,FileWriter的介绍

前面实验内容第3部分已经介绍了用PrintWriter写文本文件,第4部分介绍了用Scanner读文本文件。

其中,PrintWriter是字符输出流Writer的子类,也可以用其它子类(比如FileWriter)来写文本文件。

要读文本文件,也可以用字符输入流Reader的子类(比如FileReader)。

抽象类Reader有下列方法:

Reader是Object的子类,方法摘要如下:

abstract void

close()

          关闭该流。

 void

mark(int readAheadLimit)

          标记流中的当前位置。

 boolean

markSupported()

          判断此流是否支持mark()操作。

 int

read()

          读取单个字符。

 int

read(char[] cbuf)

          将字符读入数组。

abstract int

read(char[] cbuf,int off,int len)

          将字符读入数组的某一部分。

 int

read(CharBuffer target)

          试图将字符读入指定的字符缓冲区。

 boolean

ready()

          判断是否准备读取此流。

 void

reset()

          重置该流。

 long

skip(long n)

          跳过字符。

InputStreamReader是Reader的子类

InputStreamReader的方法摘要

 void

close()

          关闭该流。

 String

getEncoding()

          返回此流使用的字符编码的名称。

 int

read()

          读取单个字符。

 int

read(char[] cbuf,int offset,int length)

          将字符读入数组中的某一部分。

 boolean

ready()

          告知是否准备读取此流。

FileReader是InputStreamReader的子类

FileReader类的构造方法摘要

FileReader(File file)

          在给定从中读取数据的File的情况下创建一个新FileReader。

FileReader(FileDescriptor fd)

          在给定从中读取数据的FileDescriptor的情况下创建一个新FileReader。

FileReader(String fileName)

          在给定从中读取数据的文件名的情况下创建一个新FileReader。

抽象类Writer有下列方法:

Writer的方法摘要

 Writer

append(char c)

          将指定字符追加到此writer。

 Writer

append(CharSequence csq)

          将指定字符序列追加到此writer。

 Writer

append(CharSequence csq,int start,int end)

          将指定字符序列的子序列追加到此writer.Appendable。

abstract void

close()

          关闭此流,但要先刷新它。

abstract void

flush()

          刷新此流。

 void

write(char[] cbuf)

          写入字符数组。

abstract void

write(char[] cbuf,int off,int len)

          写入字符数组的某一部分。

 void

write(int c)

          写入单个字符。

 void

write(String str)

          写入字符串。

 void

write(String str,int off,int len)

          写入字符串的某一部分。

OutputStreamWriter是Writer的子类

OutputStreamWriter的方法摘要

 void

close()

          关闭该流。

 void

flush()

          刷新该流的缓冲。

 String

getEncoding()

          返回此流使用的字符编码的名称。

 void

write(char[] cbuf,int off,int len)

          写入字符数组的某一部分。

 void

write(int c)

          写入单个字符。

 void

write(String str,int off,int len)

          写入字符串的某一部分。

FileWriter是OutputStreamWriter的子类

FileWriter的构造方法摘要

FileWriter(File file)

          在给出File对象的情况下构造一个FileWriter对象。

FileWriter(File file,boolean append)

          在给出File对象的情况下构造一个FileWriter对象。

FileWriter(FileDescriptor fd)

          构造与某个文件描述符相关联的FileWriter对象。

FileWriter(String fileName)

          在给出文件名的情况下构造一个FileWriter对象。

FileWriter(String fileName,boolean append)

          在给出文件名的情况下构造FileWriter对象,它具有指示是否挂起写入数据的boolean值。

6.2用FileWriter和FileReader读写文本文件

importjava.io.*;

publicclassTestFileWriterAndFileReader{

publicstaticvoidmain(String[]arguments)throwsException{

char[]s={'c','h','i','n','a'};

FileWriterfw=newFileWriter("a.txt");

fw.write(s);//写字符数组到文件

fw.write("-goodmorning.");//写字符串到文件

fw.close();

char[]s2=newchar[100];

FileReaderfr=newFileReader("a.txt");

fr.read(s2);//读文件数据到字符数组

System.out.println(s2);//将字符数组的内容用标准输出流输出

}

}

7、用InputStream/OutputStream的子类读写文本文件

7.1InputStream和OutputStream的子类

抽象类InputStream的方法

方法摘要

 int

available()

          返回此输入流方法的下一个调用方可以不受阻塞地从此输入流读取(或跳过)的字节数。

 void

close()

          关闭此输入流并释放与该流关联的所有系统资源。

 void

mark(int readlimit)

          在此输入流中标记当前的位置。

 boolean

markSupported()

          测试此输入流是否支持mark和reset方法。

abstract int

read()

          从输入流读取下一个数据字节。

 int

read(byte[] b)

          从输入流中读取一定数量的字节并将其存储在缓冲区数组b中。

 int

read(byte[] b,int off,int len)

          将输入流中最多len个数据字节读入字节数组。

 void

reset()

          将此流重新定位到对此输入流最后调用mark方法时的位置。

 long

skip(long n)

          跳过和放弃此输入流中的n个数据字节。

抽象类OutputStream的方法

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学 > 天文地理

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1