1.File类

File对象用来获取文件本身的一些信息,例如文件所在目录,文件的长度,文件读写权限等,不涉及文件的读写操作。

创建一个File对象的构造方法有3个:

File(String filename);//filename是文件名或文件的绝对路径
File(String directoryPath,String filename);//文件路径和文件名
File(File f,String filename);

使用第一种构造方法创建File对象时,filename是文件名会被认为与当前应用程序在同一个目录中。

File类常用方法

public String getName 获取文件名
public boolean canRead() 判断文件是否可读
public boolean canWrite() 判断文件是否可写
public boolean exists() 判断文件是否存在
public long length() 获取文件的长度(单位是字节)
public String getAbsolutePath() 获取文件的绝对路径
public String getParent() 获取文件的父目录
public boolean isFile() 判断文件是否是一个正常文件,而不是目录
public boolean isDirectory() 判断文件是否是一个目录
public boolean isHidden() 判断文件是否是隐藏文件
public long lastModified() 获取文件最后修改的时间(时间从1970年午夜到文件最后修改时刻的毫秒数)

1.1.创建目录

  • File对象调用public boolean mkdir()创建一个目录,成功返回true,失败返回false。

1.2.列出目录中的文件

  • public String[] list()用字符串形式返回目录下的全部文件
  • public File[] listFiles()用File对象形式返回目录下全部文件

1.3.列出指定类型文件

  • public String[] list(FilenameFilter obj)用字符串形式返回目录下指定类型的所有文件
  • public File[] listFiles(FilenameFilter obj)用File对象返回目录下指定类型的所有文件

1.4.删除文件和目录

  • public boolean delete()可以删除当前对象代表的文件或目录;如果是目录,目录必为空;成功返回true。

2.读写文件的常用流

java.io包提供了大量的流类,其中InputStream、OutputStream、Reader、Writer是最重要的四个抽象类。

InputStream类及其子类对象为字节输入流;

OutputStream类及其子类对象为字节输出流;

Reader类及其子类对象为字符输入流;

Writer类及其子类对象为字符输出流。

使用输入流的4个步骤:

(1)设定输入流的源

(2)创建指向源的输入流

(3)让输入流读取源中的数据

(4)关闭输入流

使用输出流的4个步骤:

(1)给出输出流的目的地

(2)创建指向目的地的输出流

(3)让输出流吧数据写入到目的地

(4)关闭输出流

2.1.字节输入流

创建

FileInputStream(String name);
fileInputStream(File file);
//可能出现I/O错误
try{
FileInputStream in=new FileInputStream("hello.txt");//创建指向源的输入流
}
catch(IOException e){
System.out.print(e);
}

File f=new File("hello.txt");//指定输入流的源
try{
FileInputStream in = new FileInputStream(f);//创建指向源的输入流
}
catch(IOException e){
System.out.print(e);
}

读取字节

字节输入流的read方法以字节为单位读取源中的数据。

int read() 读取单个字节的数据,返回字节值(0~255之间的一个整数),如未读出字节就返回-1
int read(byte b[]) 读取b.length个字节到字节数组b中,返回实际读取的字节数目,如到达文件的末尾,返回-1
int read(byte b[],int off,int len) 读取len个字节到字节数组b中,并返回实际读取字节数目,如到达文件末尾,返回-1;off指定b中存放读取数据的开始位置

关闭流

使用完之后应该关闭流,close()

2.2.字节输出流

创建

FileOutputStream(String name);
FileOutputStream(File file);
try{
//创建指向目的地的输出流
FileOutputStream out=new FileOutputStream("hello.txt");
}
catch(IOException e){
System.out.peint(e);
} 或 File f=new File("hello.txt");
try{
FileOutputStream out=new FileOutputStream(f);
}
catch(IOException e){
System.out.print(e);
}
具有刷新功能的输出流
FileOutputStream(String name,boolean append);
FileOutputStream(File file,boolean appemd);

如果参数append取值为true,输出流不会刷新指向的文件(假设文件已存在),输出流的write方法将从文件的末尾开始向文件写入数据;参数append取值false,输出流将刷新所指向的文件(假设文件已存在)。

写字节

字节输出流的write方法以字节单位向目的地写数据:

void write(int n) 向目的地写数据
void write(byte b[]) 向目的地写入单个字节
void write(byte b[],int off,int len) 从给定字节数组中起始于偏移量off处获取len个字节写到目的地

关闭流

close();

2.3.字符流

字节流是使用字节读取数据,不能很好的操作Unicode字符,比如汉字在文件中占两个字节,如果使用字节流,可能会出现乱码。这里我们就要使用字符流了。

FileReader文件字符输入流:

FileReader(String filename);

FileReader(File file);

FileWriter文件字符输出流:

FileWriter(String filename);

FileWriter(File file);

FileWriter(String filename,boolean append);

FileWriter(File file,boolean append);

FileReader和FileWriter分别是Reader和Writer的子类。

字符输入流和输出流的read和write方法使用字符数组读写数据,就是以字符为基本单位处理数据。

2.4.缓冲流

BufferedReader和BufferedWriter类创建的对象称为缓冲输入、输出流,二者增强了读写文件的能力。他们的源和目的地必须是字符输入流和字符输出流。通过字符输入流和BufferedReader的配合使用,使用readLine()方法可实现按行读取数据,字符输入流原本不能按行读取数据。

BufferedReader和BufferedWriter的构造方法:

BufferedReader(Reader in);

BufferedWriter(Writer out);

FileReader in = new FileReader("hi.txt");
BufferedReader buin = BufferedReader(in);
String strLine = buin.readLine(); FileWriter out = new FileWriter("hi.txt");
BufferedWriter buout = BufferedWriter(out);
buout.write("pinnsvin",3,4);
//向hi.txt中写入"nsvi"
readLine() 读取文本行
write(String s,int off,int len) 字符串s从off处开始写入len个字符
newLine() 向文件中写入回行符
flush() 刷新缓存
close() 关闭流

3.RandomAccessFile类

RandomAccessFile类不是InputStream或OutputStream的子类,习惯上称RandomAccessFile创建的对象为一个流,它的指向既可以是源也可以是目的地。

对文件进行读写操作时,就可以创建一个RandomAccessFile对象。

RandomAccessFile类的构造方法:

  • RandomAccessFile(String name,String mode) 参数name是文件名,给出创建的流的源或目的地,mode文件的访问权限,取r(只读)或rw(可读写)
  • RandomAccessFile(File file,String mode)参数file是一个File对象,创建对象时应该捕获IO异常

RandomAccessFile类常用方法

方法名 功能
getFilePointer() 获取当前流在文件中的读写位置
length() 获取文件的长度
readByte() 从文件读取一个字节
readDouble() 从文件读取一个双精度浮点值(8个字节)
readInt() 从文件读取一个int值(4个字节)
readLine() 从文件读取一个文本行
readUTF() 从文件读取一个UTF字符串
seek(long a) 定位到当前流距离文件开头a个字节数的位置
write(byte b[]) 向文件写入b.length个字节
writeDouble(double v) 向文件写入一个双精度浮点值
writeInt(int v) 向文件写入一个int值
writeUTF(String s) 向文件写入一个UTF字符串

4.文件上传

要上传文件到服务器,JSP页面必须有File类型的表单,并且表单中必须将ENCTYPE的属性值设为“multipart/form-data”

<form action="接受文件上传页面" method="post" ENCTYPE="multipart/form-data">
<input type="file" name="test"/>
</form>

JSP引擎可以让内置对象request调用getInputStream()方法获取一个输入流,通过这个输入流读入用户上传的全部信息。

upload.jsp

<%@ page contentType="text/html;charset=utf-8" %>
<HTML><BODY>
<P>选择要上传的文件:<BR>
<FORM action="accept.jsp" method="post" ENCTYPE="multipart/form-data">
<INPUT type=FILE name="boy" size="38"> <BR>
<INPUT type="submit" name ="g" value="提交">
</BODY></HTML>

accept.jsp

<%@ page contentType="text/html;charset=utf-8" %>

<%@ page import ="java.io.*" %>

<HTML><BODY>

<%try{ InputStream in=request.getInputStream();

File f=new File("d:/story","B.txt");

FileOutputStream o=new FileOutputStream(f);

byte b[]=new byte[1000];

int n;

while((n=in.read(b))!=-1)

{o.write(b,0,n); }

o.close();

in.close();

}

catch(IOException ee){}

out.print("文件已上传"); %> 

</BODY></HTML>

5.文件下载

JSP内置对象response调用getOutputStream()方法可以获取一个指向用户的输出流,服务器将文件写入这个流,用户就可以下载这个文件了。当提供下载功能时,应该使用response对象向用户发送HTTP头消息,浏览器就会调用相应的外部程序打开下载的文件。

response调用setHeader方法添加下载头的格式:

response.setHeader(“Content-disposition”,”attachment;filename=”下载文件名”);

download.jsp

<%@ page contentType="text/html;charset=utf-8" %>
<HTML>
<BODY>
<P>点击超链接下载Zip文档book.Zip
<BR> <A href="loadFile.jsp">下载book.zip
</Body>
</HTML>

loadFile.jsp

<%@ page contentType="text/html;charset=utf-8" %>
<%@ page import="java.io.*" %>
<HTML>
<BODY>
<% //获得响应客户的输出流:
OutputStream o=response.getOutputStream();
//输出文件用的字节数组,每次发送500个字节到输出流:
byte b[]=new byte[500];
//下载的文件:
File fileLoad=new File("d:/story","book.zip");
//客户使用保存文件的对话框:
response.setHeader("Content-disposition","attachment;filename="+"book.zip");
//通知客户文件的MIME类型:
response.setContentType("application/x-tar");
//通知客户文件的长度:
long fileLength=fileLoad.length();
String length=String.valueOf(fileLength);
response.setHeader("Content_Length",length);
//读取文件book.zip,并发送给客户下载:
FileInputStream in=new FileInputStream(fileLoad);
int n=0;
while((n=in.read(b))!=-1)
{ o.write(b,0,n);
}
%>
</BODY></HTML>

JSP学习笔记(7)-JSP的文件操作的更多相关文章

  1. VBA二次学习笔记(1)——文件操作

    说明(2018-9-1 11:20:46): 1. 上班三个月了,累的一逼,真的是钱少事多离家远,每天早上六点起,晚上八点回.哎,少壮不努力啊! 2. 三个月没写博客了,上一篇已经是5.29的了,真的 ...

  2. python学习笔记(二)文件操作和集合

    集合: 集合也是一种数据类型,一个类似列表东西,它的特点是无序的,不重复的,也就是说集合中是没有重复的数据 集合的作用: 1.它可以把一个列表中重复的数据去掉,而不需要你再写判断 2.可以做关系测试, ...

  3. python学习笔记——(三)文件操作

    ·集合操作及其相应的操作符表示集合中没有插入,只有添加,因为毕竟无序 #!/usr/bin/env python # -*- coding:utf-8 -*- # Author:Vergil Zhan ...

  4. python 基础学习笔记(5)--文件操作

    **python 的文件操作** - [ ] 使用python来读写文件是非常简单的操作,我们使用open()来打开一个文件,获取到文件的语柄,然后通过文件语柄就可以进行各种各样的操作了. - [ ] ...

  5. 02-Node.js学习笔记-系统模块fs文件操作

    2.1.什么是系统模块 Node 运行环境提供的API,因为这些API都是以模块化的方式进行开发的,所有我们又称Node运行环境提供的API为系统模块 3.1系统模块fs文件操作 //f :file ...

  6. python学习笔记(五)文件操作和集合

    文件基本操作: 现有文件file.txt f=open('file.txt','r')#以只读方式打开一个文件,获取文件的句柄,如果是读的话,r可以不写,默认就是只读:文件不存在时,会报错 first ...

  7. python学习笔记(11)文件操作

    一.读文件 读写文件是最常见的IO操作.Python内置了读写文件的函数,用法和C是兼容的. 读写文件前,我们先必须了解一下,在磁盘上读写文件的功能都是由操作系统提供的,现代操作系统不允许普通的程序直 ...

  8. Nodejs学习笔记(4) 文件操作 fs 及 express 上传

    目录 参考资料 1. fs 模块 1.1 读取文件fs.readFile 1.2 写入文件fs.writeFile 1.3 获取文件信息fs.stat 1.4 删除文件fs.unlink 1.5 读取 ...

  9. python学习笔记(八)——文件操作

    在 windows 系统下,我们通过 路径+文件名+扩展名的方式唯一标识一个文件,而在 Linux 系统下通过 路径+文件名唯一标识一个文件. 文件分类:文件主要可以分为文本文件和二进制文件,常见的如 ...

  10. Go语言学习笔记(五)文件操作

    加 Golang学习 QQ群共同学习进步成家立业工作 ^-^ 群号:96933959 文件读取 os.File 封装了文件相关操作 type File File代表一个打开的文件对象. func Cr ...

随机推荐

  1. pip指定网址安装

    用pip安装库的有时候很慢都动不了 ,访问速度很慢,不稳定等缺陷 所以呢为了解决这个问题只能指定网址源下载的话速度就很快了 pip安装默认访问的是https://pypi.Python.org/sim ...

  2. 使用Nginx转发TCP/UDP数据

    编译安装Nginx 从1.9.0开始,nginx就支持对TCP的转发,而到了1.9.13时,UDP转发也支持了.提供此功能的模块为ngx_stream_core.不过Nginx默认没有开启此模块,所以 ...

  3. python爬虫在解析不带引号的json报错的问题解决方案

    本例中环境: python3.6.6 demjson-2.2.4 如不看废话请直接看3(下面红体字) 1.近期在爬取代理验证代理的时候发生一个Bug, 就是在验证代理的时候返回的是如下字符串, {ip ...

  4. 用开源 ASP.NET MVC 程序 Bonobo Git Server 搭建 Git 服务器(转)

    用开源 ASP.NET MVC 程序 Bonobo Git Server 搭建 Git 服务器   现在不用Git,都不好意思说自己是程序员. 当你想用Git,而源代码服务器是Windows系统时,你 ...

  5. POJ 2643

    #include<iostream> #include<stdio.h> #include<string> #include<algorithm> #d ...

  6. zookeeper 备忘

    cd /bin $ ./zkCli.sh ls /a 查看 ls /a true 查看并watch create –e /a 临时节点 create –s /a 顺序节点 create –e –s / ...

  7. redhat_6.5下载地址

    redhat官方下载(需要注册帐号+订阅/申请试用方可下载) https://access.redhat.com/downloads/ 网络资源:附RHEL 6.5安装文件MD5及SHA-256:一. ...

  8. Git for Windows之日志查看与版本切换

    1.查看本地版本库的修改日志 (1).通过log指令查看完整日志 (2).通过 log --pretty=oneline查看简易版日志 2.版本切换 (1).切换到本地版本库最新的版本,通过reset ...

  9. 阿里云安装配置Ghost

    阿里云手动重装系统N次了,折腾不止.  系统环境 CentOS 6.3 X64 , 两块硬盘 系统 +数据盘 #重新挂载硬盘 [root@AY14040623435015772eZ ~]# fdisk ...

  10. Android的ListView分页功能(上滑加载更多)

    今天主要工作是将之前实现的各种ListView显示全部信息,优化成了每次加载几条数据,然后上滑的时候加载更多,底部显示一个进度条和一个文字提示,然后加载完毕后,将提示信息隐藏. 一边看教学视频一遍敲代 ...