第十一天 Java IO操作Word文件下载.docx
- 文档编号:6759239
- 上传时间:2023-05-07
- 格式:DOCX
- 页数:49
- 大小:405.88KB
第十一天 Java IO操作Word文件下载.docx
《第十一天 Java IO操作Word文件下载.docx》由会员分享,可在线阅读,更多相关《第十一天 Java IO操作Word文件下载.docx(49页珍藏版)》请在冰点文库上搜索。
publicbooleancreateNewFile()throwsIOException;
删除文件:
publicbooleandelete();
判断路径是否存在:
publicbooleanexists();
package
cn.mldn.demo;
import
java.io.File;
public
class
TestDemo{
static
void
main(String[]args)
throws
Exception{
Filefile=
new
File("
D:
\\demo.txt"
);
//
文件的路径
if
(file.exists()){
文件存在
file.delete();
删除文件
}
else
{
文件不存在
file.createNewFile();
创建新文件
}
本程序操作就表示文件如果存在则删除,如果不存在,则创建一个新的文件,此时基本功能是实现了,不过这个程序此时却存在了三个问题:
问题一:
关于路径分隔符
在windows操作系统之中,使用“\”作为路径分隔符,而在linux系统下使用“/”作为路径的分隔符,而从实际的开发而言,大部分情况下都会在windows中做开发,而后将项目部署到linux下,那么此时,路径的分隔符都需要进行修改,这样实在是过于麻烦,为此在File类之中提供了一个常量:
publicstaticfinalString
separator(按照Java的命名规范来讲,对于全局常量应该使用大写字母的方式定义,而此处使用的是小写,是由Java的发展历史所带来的问题)。
"
+File.separator
+
demo.txt"
问题二:
是有可能(本人没出现过,学生出现过)会出现的问题
发现当程序执行完成之后,对于文件的创建或者是删除是会存在一些操作上的延迟,如果现在假设先删除了一个文件,而后立刻判断此文件是否存在,那么可能得到的结果就是错误的(为true),因为所有的*.class文件都要通过JVM与操作系统间接操作,这样就有可能会出现延迟的问题。
问题三:
之前进行文件创建的时候都是在根路径下创建完成的,如果说现在要创建的文件有目录呢?
例如,现在要创建一个d:
\hellodemo\my\test\demo.txt文件,而此时在执行程序的时候hellodemo目录不存在,这个时候执行的话就会出现错误提示:
Exceptioninthread"
main"
java.io.IOException:
系统找不到指定的路径。
因为现在目录不存在,所以不能创建,那么这个时候必须要首先判断要创建文件的父路径是否存在,如果不存在应该创建一个目录,之后再进行文件的创建,而要想完成这样的操作,需要以下几个方法的支持:
找到一个指定文件的父路径:
publicFilegetParentFile();
创建目录:
publicbooleanmkdirs()。
hellodemo"
my"
test"
(!
file.getParentFile().exists()){
父路径不存在
file.getParentFile().mkdirs();
创建目录
以后在任何的java.io.File类开发的过程之中,都一定要考虑文件目录的问题。
除了以上的常用的方法之外,在File类之中还可以通过以下的方法取得一些文件的基本信息:
取得文件的名称|:
publicStringgetName();
给定的路径是否是文件夹:
publicbooleanisDirectory();
给定的路径是否是文件:
publicbooleanisFile();
是否是隐藏文件:
publicbooleanisHidden();
文件的最后一次修改日期:
long
lastModified();
取得文件大小:
publiclonglength(),是以字节为单位返回的。
java.math.BigDecimal;
java.text.SimpleDateFormat;
java.util.Date;
eclipse.zip"
System.out.println("
文件名称:
+file.getName());
System.out.println(file.getName()
+(file.isDirectory()?
是一个目录。
:
不是一个目录。
));
+(file.isFile()?
是一个文件。
不是一个文件。
+(file.isHidden()?
是一个隐藏文件。
不是一个隐藏文件。
最后一次更改日期:
SimpleDateFormat("
yyyy年MM月dd日
HH时mm分ss秒"
)
.format(new
Date(file.lastModified())));
文件大小:
BigDecimal(file.length()/(double)1024/1024)
.divide(new
BigDecimal
(1),2,
BigDecimal.ROUND_HALF_UP).doubleValue()
M。
为一个文件重命名,使用File类可以为文件执行重命名的一个操作,操作方法:
publicbooleanrenameTo(Filedest),在这个方法上需要传入一个File类对象,而这个对象就表示新的名字。
FilenewFile=
世界末日的eclipse.zip"
file.renameTo(newFile);
在File类之中有一个非常重要的方法,可以列出一个指定目录下的全部文件信息:
列出目录内容:
publicFile[]listFiles(),此方法将目录中的所有文件以File对象数组的方式返回;
列出指定的目录内容
javademo"
文件目录存在
Fileresult[]=file.listFiles();
列出目录中的全部内容
for
(int
x=0;
x<
result.length;
x++){
System.out.println(result[x]);
}}
那么下面继续做一个稍微复杂点的应用,现在希望可以将一个目录之中的全部文件都列出来,那么这种情况下只能采用递归:
因为列出一个目录下的全部文件或文件夹之后,如果发现列出的内容是文件夹,则应该向后继续列出。
〖了解〗范例:
列出指定目录下的全部内容
+File.separator);
print(file);
print(Filefile){
(file.isDirectory()){
给的路径是文件夹
列出此目录中的全部内容
(result!
=
null){
print(result[x]);
System.out.println(file);
当然,如果此时可以将输出操作变为删除操作(file.delete();
),就表示彻底清空。
3.2、字节流和字符流(核心)
使用File类执行的所有操作都是针对于文件本身,但是却没有针对于文件的内容,而要进行文件内容操作就需要通过Java之中提供的两组类完成:
字节操作流(是在JDK1.0的时候定义的):
OutputStream、InputStream;
字符操作流(是在JDK1.1的时候定义的):
Writer、Reader。
但是不管是字节流还是字符流的操作,本身都表示资源操作,而执行所有的资源操作都会按照如下的几个步骤进行,下面以文件操作为例(对文件进行读、写操作):
如果要操作的是文件,那么首先要通过File类对象找到一个要操作的文件路径(路径有可能存在,有可能不存在,如果不存在,则要创建路径);
通过字节流或字符流的子类为字节流或字符流的对象实例化(向上转型);
执行读
/
写操作;
最后一定要关闭操作的资源(close()),不管日后如何操作,资源永远要关闭。
3.2.1
、字节输出流:
OutputStream
java.io.OutputStream主要的功能是进行字节数据的输出的,而这个类的定义如下:
publicabstractclassOutputStream
extendsObject
implementsCloseable,Flushable
发现OutputStream类定义的时候实现了两个接口:
Closeable、Flushable,那么这两个接口的定义如下:
Closeable:
JDK1.5推出
Flushable:
interface
Closeable
extendsAutoCloseable{
close()
IOException;
Flushable{
flush()
提示:
对于Closeable继承的AutoCloseable接口
AutoCloseable是在JDK1.7的时候又增加了一个新的接口,但是这个接口的定义和Closeable定义是完全一样的,我个人认为:
有可能在一些其他的类上出现了自动的关闭功能,Closeable是手工关闭,AutoCloseable属于自动关闭。
但是对于Closeable和Flushable这两个接口实话而言用户不需要关注,因为从最早的习惯对于flush()和close()两个方法都是直接在OutputStream类之中定义的,所以很少去关心这些父接口问题。
对于OutputStream类而言发现其本身定义的是一个抽象类(abstractclass),按照抽象类的使用原则来讲,需要定义抽象类的子类,而现在如果要执行的是文件操作,则可以使用FileOutputStream子类完成,如果按照面向对象的开发原则,子类要为抽象类进行对象的实例化,而后调用的方法以父类中定义的方法为主,而具体的实现找实例化这个父类的子类完成,也就是说在整个的操作之中,用户最关心的只有子类的构造方法:
实例化FileOutputStream(新建数据):
publicFileOutputStream(Filefile)throwsFileNotFoundException;
实例化FileOutputStream(追加数据):
publicFileOutputStream(Filefile,booleanappend)
throwsFileNotFoundException
当取得了OutputStream类的实例化对象之后,下面肯定要进行输出操作,在OutputStream类之中定义了三个方法:
输出单个字节数据:
publicabstractvoidwrite(int
b)throwsIOException;
输出一组字节数据:
publicvoidwrite(byte[]b)throwsIOException;
输出部分字节数据:
publicvoidwrite(byte[]b,intoff,intlen)throwsIOException;
使用OutputStream向文件之中输出数据,输出路径:
d:
\hellodemo\test.txt
java.io.FileOutputStream;
java.io.OutputStream;
test.txt"
第1步:
定义文件路径
创建父路径
OutputStreamoutput=
FileOutputStream(file);
第2步:
通过子类实例化父类
Stringdata=
HelloWorld."
;
要输出的数据
output.write(data.getBytes());
第3步:
输出数据,要将数据变为字节数组输出
output.close();
第4步:
关闭资源
在整个的文件输出过程之中可以发现,如果现在要输出的文件不存在,那么会出现自动创建文件的情况,并且如果重复执行以上的代码,会出现新的内容覆盖掉旧内容的操作,所以下面可以使用FileOutputStream类的另外一个构造方法进行数据的追加:
FileOutputStream(file,
true);
HelloWorld.\r\n"
关闭资
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第十一天 Java IO操作 第十 一天 IO 操作