第9章 Java输入输出Word文档格式.docx
- 文档编号:19722586
- 上传时间:2023-01-09
- 格式:DOCX
- 页数:47
- 大小:64.56KB
第9章 Java输入输出Word文档格式.docx
《第9章 Java输入输出Word文档格式.docx》由会员分享,可在线阅读,更多相关《第9章 Java输入输出Word文档格式.docx(47页珍藏版)》请在冰豆网上搜索。
若以字节流方式读取该字符串则需读8次,因为存在8个字节;
而以字符流的方式则需读6次,因为是6个字符。
中文Windows系统下的Java环境是以中文字符编码为默认格式,即“GB2312”或“GBK”,可以自动判断中文字符。
若是在英文Windows系统或UNIX系统下,对于中文的识别则需指定中文字符编码格式,这是在字符流读/写时要注意的,
需要注意的是:
本质上所有的读/写操作都是以字节为单位进行的。
Java语言提供了基于字符的流是为了给处理字符提供更方便、更有效的方法。
下面是对字节流类和字符流类的介绍。
1.字节流类
字节流类由两个层次结构定义。
在顶层有两个抽象类:
InputStream和OutputStream。
每个抽象类都有多个具体的子类,这些子类对不同的外设进行处理,例如磁盘文件、网络连接、甚至是内存缓冲区。
需要说明的是,要使用流类,必须导入java.io包。
如表9-1所示为字节流类。
表9-1字节流类
流类
含义
BufferedInputStream
缓冲输入流
BufferOutputStream
缓冲输出流
ByteArrayInputStream
从字节数组读取的输入流
ByteArrayOutputStream
向字节数组写入的输出流
DataInputStream
包含读取Java标准数据类型的输入流
DataOutputStream
包含编写Java标准数据类型的输出流
FileInputStream
读取文件的输入流
FileOutputStream
写文件的输出流
FilterinputStream
实现InputStream
FilterOutputStream
实现OutputStream
InputStream
描述流输入的抽象类
OutputStream
描述流输出的抽象类
PipedInputStream
输入管道
PipedOutputStream
输出管道
PrintStream
包含print()和println()的输出流
PushbackInputStream
支持向输入流返回一个字节的单字节的“unget”的输入流
RandomAccessFile
支持随机文件输入/输出
SequenceInputStream
两个或两个以上顺序读取的输入流组成的输入流
抽象类InputStream和OutputStream定义了实现其他流类的关键方法。
最重要的两种方法是read()和write(),它们分别对数据的字节进行读写。
两种方法都在InputStream和OutputStream中被定义为抽象方法,它们被派生的流类重写。
⑴InputStream类中的常用方法如下。
①abstractintread():
从输入流中读一个字节,形成一个0~255的整数返回(是一个抽象方法)。
②intread(byteb[]):
读多个字节到数组中。
③intread(byteb[],intoff,intlen):
从输入流中读取长度为len的数据,写入数组b中从索引off开始的位置,并返回读取的字节数。
对于以上3个方法,若返回-1,表明流结束。
④skip():
跳过流中若干字节数。
⑤available():
返回流中可用字节数。
⑥mark():
在流中标记一个位置。
⑦reset():
返回标记过的位置。
⑧markSupport():
是否支持标记和复位操作。
⑨close():
关闭流。
⑵OutputStream类的常用方法如下
①write(intb):
将一个整数输出到流中(只输出低位字节,抽象方法)。
②write(byteb[]):
将字节数组中的数据输出到流中。
③abstractwrite(byteb[],intoff,intlen):
将数组b中从off指定的位置开始,长度为len的数据输出到流中。
④flush():
刷空输出流,并将缓冲区的数据强制送出。
⑤close():
2.字符流类
字符流类由两个类层次结构定义。
顶层有两个抽象类:
Reader和Writer。
这些抽象类处理统一编码的字符流。
Java语言中这些类含有多个具体的子类。
如表9-2所示为字符流的输入/输出类。
表9-2字符流的输入/输出类
BufferedReader
缓冲输入字符流
BufferedWriter
缓冲输出字符流
CharArrayReader
从字符数组读取数据的输入流
CharArrayWriter
向字符数组写数据的输出流
FileReader
FileWriter
FilterReader
过滤读
FilterWriter
过滤写
InputStreamReader
把字节转换成字符的输入流
LineNumberReader
计算行数的输入流
OutputStreamWriter
把字符转换成字节的输出流
PipedReader
PipedWriter
PrintWriter
PushbackReader
允许字符返回到输入流的输入流
Reader
描述字符流输入的抽象类
StringReader
读取字符串的输入流
StringWriter
写字符串的输出流
Writer
描述字符流输出的抽象类
抽象类Reader和Writer定义了几个实现其他流类的关键方法,其中两个最重要的是read()和write(),它们分别进行字符数据的读和写,这些方法被派生流类重载。
Java语言的输入/输出类库中包含的流类很多,这里只做了一个简要的介绍。
更详细的内容可以参看类库手册。
9.1.3标准输入/输出
Java程序中所进行的标准输入/输出操作指的是向控制台屏幕打印和读取键盘输入入,这些操作的完成都是通过java.lang.System类所定义的三个流变量(in、out、err)来实现的。
这三个变量都定义为public和static,所以使用时可直接通过System类名对其加以引用。
System.in变量表示标准输入流,默认指的是键盘,它是InputStream类的对象。
System.out变量表示标准输出流,默认指的是控制台屏幕,System.err变量表示标准错误流,默认情况下它也指向控制台屏幕。
对System.out和System.in,下面简单加以回顾,并介绍关于标准输入/输出重定向的示例。
[例9-1]控制台屏幕打印。
(1)程序内容
1classHelloWorld{
2publicstaticvoidmain(Stringargs[]){
3System.out.println("HelloWorld!
");
4}
5}
程序执行结果:
D:
\JAVA\9>
javaHelloWorld
HelloWorld!
(2)程序分析
上处程序的运行结果是在控制台屏幕上打印“HelloWorld!
”这个字符串。
程序中第3行引用了System.out变量,并使用了PrintStream类的方法println()。
PrintStream类是属于字节流的输出类,它在进行输出时是将需要打印的字符按当前系统的默认字符编码格式转变为字节再进行打印的。
因此,当需要打印字符而不是字节时,Java语言推荐使用PrintWriter类,PrintWriter类是基于字符的类。
PrintWriter类定义了多个构造方法,这里主要介绍:
(1)publicPrintWriter(OutputStreamout)
(2)publicPrintWriter(OutputStreamout,booleanautoFlash)
这两个构造方法都是基于一个已有的OutputStream对象来创建PrintWriter类的对象。
两者的区别在于是否具有自动换行刷新功能,该功能体现在当引用PrintWriter类的println()方法时是否刷新输出流。
若autoFlash设置为true,则换行刷新自动发生;
若为false,则不发生。
[例9-2]通过PrintWriter类重定向控制台屏幕打印程序。
1importjava.io.PrintWriter;
//引入了PrintWriter类
2classHelloWorld2{
3publicstaticvoidmain(Stringargs[]){
4PrintWriterpw=newPrintWriter(System.out,true);
//通过System.out这个已有的标准输出创建了PrintWriter类的对象pw,程序自动换行刷新
5pw.println("HelloWorld!
6pw.println("你好!
7}
8}
javaHelloWorld2
你好!
[例9-3]在控制台中求两个实数的和,通过键盘输入任意两个实数,将其和输出。
1importjava.io.*;
//引入io包中的IOException类
2classInputTest
3{
4publicstaticvoidmain(Stringarg[])throwsIOException//抛出异常
5{
6Stringstr;
7BufferedReaderbr=newBufferedReader(newInputStreamReader(System.in));
8System.out.println("
inputafloat:
"
);
9str=br.readLine();
10floatf1=Float.parseFloat(str);
//转换字符串为实型数据
11System.out.println("
inputanotherfloat:
12str=br.readLine();
13floatf2=Float.parseFloat(str);
//转换字符串为实型数据
14System.out.println("
它们的和是:
+(f1+f2));
15}
16}
\JAVA\9>
javaInputTest
Inputafloat:
2.1
Inputanotherfloat:
3.25
5.35
该程序运行后,输出一行提示“Inputafloat:
”,然后进入等待状态,然后用户输入一个实数并按下“回车”键,又输出一行提示“Inputanotherafloat:
”,然后用户输入另一个实数,然后输出两个实数的和。
所用到的InputStreamReader类的构造方法主要有:
(1)publicInputStreamReader(InputStreamin)
(2)publicInputStreamReader(InputStreamin,StringcharsetName)
这两个构造方法都是基于一个已有的InputStream对象来创建InputStreamReader类的对象,两者的区别在于是否指定将字节转变为字符的编码格式,若不指定则采用当前系统所默认的字符编码格式。
所用到的BufferedReader类的构造方法主要有:
publicBufferedReader(Readerin)
该构造方法是基于一个已有的Reader对象来创建BufferedReader类的对象。
BufferedReader类除了提供有每次读一个字符的read()方法,还具有读一行字符串(即该字符串以“回车”和“换行”符结束)的方法readLine()。
9.2文件输入/输出
Java语言提供了一系列的读写文件的类和方法。
在Java语言中,所有文件都是字节形式的。
Java语言提供从文件读写字节的方法,而且允许在字符形式的对象中使用字符文件流。
9.2.1Java文件和目录管理
文件是用来保存数据的,目录是管理文件的特殊机制,同类文件保存在同一个目录下可以简化文件管理。
因此,掌握文件和目录的操作对于编程人员是必需的。
Java语言支持文件管理和目录管理,它们都是由专门的java.io.File类来实现的。
File类也属于java.io包,但它不是InputStream或者OutputStream的子类。
每个File类的对象表示一个磁盘文件或目录,其对象属性中包含了文件或目录的相关信息,如名称、长度和所含文件个数等,调用它的方法则可以完成对文件或目录的常用管理操作,如创建、删除等。
1.创建File类的对象
每个File类的对象都对应了系统的一个磁盘文件或目录,所以创建Fie类对象时需指明它所对应的文件或目录名。
路径是从盘符经过各级子目录到文件的目录序列。
由于文件可以在不同的磁盘、不同的目录中,所以在存取文件时,必须指定文件的存放位置。
文件的存放位置通过路径来描述,路径的表示格式为:
盘符:
\目录名\...\文件名
例:
C:
\windows\java\myfile.java
在一个树形目录结构中,当前工作的子目录,称为当前目录。
凡从根目录开始的路径叫做绝对路径,应以“\”开头;
凡不从根目录开始而从当前目录开始的路径叫做相对路径,应从当前目录的下级目录开始。
例如,假如上述文件myfile.java完整的文件标识是C:
\windows\java\myfile.java,如果当前根目录是C盘,可写成\windows\java\myfile.java;
如果当前目录是C:
\windows,可写成java\myfile.java。
File类共提供了3种不同的构造方法,以不同的参数形式灵活地接收文件和目录信息。
(1)File(Stringpath):
字符串参数path指明了新创建的File对象对应的磁盘文件或目录名及其路径名。
path参数也可以对应磁盘上的某个目录,如“D:
\java\temp”或“java\temp”。
(2)File(Stringpath,Stringname):
第一个参数path表示所对应的文件或目录的绝对或相对路径,第二个参数name表示文件或目录名。
这里将路径与名称分开的好处是相同路径的文件或目录可共享同一个路径字符串,管理、修改都比较方便。
(3)File(Filedir,Stringname):
这种构造方法使用另一个已经存在的代表某磁盘目录的File对象作为第一个参数,表示文件或目录的路径,第二个字符串参数表述文件或目录名。
2.获取文件或目录属性
一个对应于某磁盘文件或目录的File对象一经创建,就可以通过调用它的方法来获得该文件或目录的属性。
其中,较常用的方法如下。
(1)判断文件或目录是否存在
publicBooleanexists();
若文件或目录存在,则返回true,否则返回false
(2)判断文件还是目录
publicBooleanisFile();
若对象代表有效文件,则返回true
publicBooleanisDirectory();
若对象代表有效目录,则返回true
(3)获取文件或目录名称与路径
publicStringgetName();
返回文件或目录名。
publicStringgetPath();
返回文件或目录的路径。
publicStringgetAbsolutePath();
返回文件或目录的绝对路径。
(4)获取文件的长度
publiclonglength();
返回文件的字节数。
(5)获取文件读写属性
publicBooleancanRead();
若文件为可读文件,则返回true,否则返回false。
publicBooleancanWrite();
若文件为可写文件,则返回true,否则返回false。
(6)列出目录中的文件
publicString[]list();
将目录中所有文件名保存在字符串数组中返回。
PublicString[]list(FilenameFilterfilter);
返回由包含在目录中的文件和目录的名称所组成的字符串数组,这一目录是通过满足指定过滤器的抽象路径名来表示的。
(7)比较两个文件或目录
publicBooleanequals(Filef);
若两个File对象相同,则返回true。
3.文件或目录操作
File类中还定义了一些对文件或目录进行管理、操作的方法,常用的有如下几种。
(1)重命名文件
publicBooleanrenameTo(FilenewFile);
将文件重命名成newFile对应的文件名。
(2)删除文件
publicvoiddelete();
将当前文件删除。
(3)创建目录
publicBooleanmkdir();
创建当前目录的子目录。
[例9-4]显示文件和目录信息。
2publicclassFileDemo1{
3publicstaticvoidmain(String[]args){
4FileflDir=newFile("
."
//实例化File对象,其中“.”表示当前目录
5System.out.println("
Filein"
+flDir.getAbsolutePath());
6StringstrFiles[]=flDir.list();
//引用File类的方法list(),将当前目录下的所有文件名和子目录名填入字符串数组
7intintDirCount=0,intFileCount=0;
//变量intDirCount和intFileCount分别用来记录子目录的个数和文件的个数
8longlngSize=0;
//变量lngSize用来记录所有文件的长度
9for(inti=0;
i<
strFiles.length;
i++){
10FileflTemp=newFile(strFiles[i]);
11if(flTemp.exists()){
12if(flTemp.isFile()){//判断是否普通文件
13System.out.println(strFiles[i]+"
\t"
+flTemp.length());
//列出当前目录下的所有文件和文件长度
14intFileCount++;
15lngSize=lngSize+flTemp.length();
17if(flTemp.isDirectory()){//判断是否目录
18System.out.println(strFiles[i]+"
\t<
DIR>
//列出当前目录下的所有子目录
19intDirCount++;
20}
21}
22}
23System.out.println(intFileCount+"
file(s)\t"
+lngSize+"
bytes"
24System.out.println(intDirCount+"
dir(s)"
25}
26}
图9-1例9-4的运行结果
上述程序用于显示当前目录下的文件和目录信息,类似于DOS中的dir命令。
[例9-5]用File类来判断文件类型和长度。
1importjava.io.File;
2publicclassFileDemo2{
3publicstaticvoidmain(String[]args){
4if(args.length<
=0){
nofilenameargumentspecified"
6System.exit(0);
8StringfileName=args[0];
9Filef=newFile(fileName);
//以命令行参数作为文件名,并将该文件名实例化File对象
10if(!
f.exists()){//判断该文
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第9章 Java输入输出 Java 输入输出