1、File类
File类的对象主要用来获取文件本身的一些信息,不涉及对文件的读写操作。
创建一个File对象的构造方法有3个:
经常使用File类的下列方法获取文件本身的一些信息:

创建目录
File对象调用方法public boolean mkdir()创建一个目录
如果创建成功就返回true,否则返回false,若该目录已存在也返回false列出目录中的文件
如果File对象是一个目录:
public String [ ] list() // 用字符串形式返回目录下的全部文件.
public File [ ] listFiles() // 用File对象形式返回目录下的全部文件。列出指定类型的文件
public String [ ] list(FilenameFilter obj) // 该方法用字符串形式返回目录下的指定类型的所有文件。
public File [ ] listFiles(FilenameFilter obj) // 该方法用File对象返回目录下的指定类型的所有文件。删除文件和目录
File对象调用方法public boolean delete()删除当前对象代表的文件或目录.
如果对象表示的是一个目录,则该目录必须是空目录.
删除成功返回true.String path=request.getRealPath("/");//传递参数"/"可以返回web应用根目录
String tmp_path=path+"tmp";
File f1=new File(tmp_path);//创建FILE类,指定路径为tmp_path
f1.mkdir();//创建目录
File f2=new File(tmp_path,"a.txt");//创建FILE类,指定路径为//tmp_path+"a.txt"
f2.createNewFile();//创建f2指定的文件
File f3=new File(tmp_path,"b.txt");
f3.createNewFile();
File f4=new File(tmp_path,"b.txt");
f4.createNewFile()
2、读写文件的常用流
Java的I/O流提供一条通道程序,可以使用这条通道把源中的数据送给目的地。
1)字节输入流
如果对文件读取需求比较简单:
FileInputStream类(文件字节输入流),该类是InputStream类的子类(以字节为单位读取文件)。
使用输入流通常包括4个基本步骤:
(1)设定输入流的源
(2)创建指向源的输入流
(3)让输入流读取源中的数据
(4)关闭输入流。
字节输入流-构造方法
使用输入流读取字节
输入流的目的是提供读取源中数据的通道,程序可以通过这个通道读取源中的数据。
关闭流
输入流都提供了关闭方法close() 。
2)字节输出流
如果对文件写入需求比较简单:
FileOutputStream类(文件字节输出流),它是OutputStream类的子类(以字节为单位向文件写入内容)。
使用输出流通常包括4个基本步骤:
(1)给出输出流的目的地
(2)创建指向目的地的输出流
(3)让输出流把数据写入到目的地
(4)关闭输出流
字节输出流-构造方法
如果输出流指向的文件不存在,java就创建该文件,如果已经存在,输出流将刷新该文件,使其长度为0.
选择是否具有刷新功能的构造方法
使用输出流写字节
输出流的目的是提供通往目的地的通道,程序可以通过这个通道将程序中的数据写入到目的地。
关闭流
通过调用close()方法关闭输出流可以把该流所用的缓冲区的内容冲洗掉
3)字符流
构造方法分别是:
4)缓冲流
BufferedReader类和BufferedWriter的构造方法分别是:
需要注意的是二者的源和目的地必须是字符输入流和字符输出流
可以把BufferedReader和BufferedWriter称为上层流,把它们指向的字符流称为底层流,Java采用缓存技术将上层流和底层流连接。
当BufferedWriter流调用flush()刷新缓存或调用close()方法关闭时,底层流也会立刻将缓存的内容写入目的地。
3、RandomAccessFile类
RandomAccessFile类创建的流与前面的输入、输出流不同。
习惯上,仍称RandomAccessFile类创建的对象为一个流。
RandomAccessFile流的指向既可以作为源也可以作为目的地。
RandomAccessFile类的两个构造方法:
读写方法

4、文件操作
文件的建立与删除
首先取得当前的磁盘路径,指定要建立的文件的路径,再进行检查,如果文件不存在,如果文件不存在,则建立这个文件,如果文件存在,则删除这个文件。
CreateDelete.jsp
| <%@ page contentType="text/html; charset=GB2312"%> <%@ page import="java.io.*" %> <%@ page language="java" %> <HTML> <HEAD> <TITLE>文件的建立与删除</TITLE> </HEAD> <BODY> <CENTER> <FONT SIZE = 5 COLOR = blue>文件的建立与删除</FONT> </CENTER> <BR> <HR> <BR> <% //建立代表目前目录位置中File.txt档的File变量, 并由fileName变量变数引用 String path = request.getRealPath("/jsphosting/wenjian"); File fileName = new File(path, "File.txt"); //检查File.txt是否存在 if(fileName.exists()) { //删除File.txt档 fileName.delete(); //输出目前所在的目录路径 out.println(path + "\\File.txt"); %> <FONT SIZE = 4 COLOR = red>存在</FONT>, 已完成 <FONT SIZE = 4 COLOR = red>删除</FONT> <% } else { //在目前的目录下建立一个名为File.txt的文字档 fileName.createNewFile(); //输出目前所在的目录路径 out.println(path + "\\File.txt"); %> <FONT SIZE = 4 COLOR = red>不存在</FONT>, 已完成 <FONT SIZE = 4 COLOR = red>建立</FONT> <% } %> </BODY> </HTML> |
显示目录中的文件
首先建立要显示的目录的FILE对象,然后调用LISTFILES方法,该方法返回一个FILE对象数组,显示数组中的所有元素即可。
ListFile.jsp
| <%@ page contentType="text/html; charset=GB2312"%> <%@ page language="java" %> <%@ page import="java.io.*" %> <HTML> <HEAD> <TITLE>取得目录中的文件</TITLE> </HEAD> <BODY> <CENTER> <FONT SIZE = 5 COLOR = blue>取得目录中的文件</FONT> </CENTER> <BR> <HR> <BR> <% //取得目前目录的磁盘目录 String path = request.getRealPath("/jsphosting/wenjian"); //建立代表目前目录位置的d变量 File d = new File(path); //取得代表目录中所有文件 File list[] = d.listFiles(); %> 在<Font color = red><%= path%></Font>目录下的文件有(每个文件有其相应的功能)<BR> <Font color = blue> <ul> <% for(int i=0; i < list.length; i++) { %> <li><%= list[i].getName() %><BR> <% } %> </ul> </Font> </BODY> </HTML> |
读取文件中的字符
直接调用FILEREADER对象的READ()方法读取所要显示的字符
ReadAll.jsp
| <%@ page contentType="text/html; charset=GB2312" %> <%@ page language="java" %> <%@ page import="java.io.*" %> <HTML> <HEAD> <TITLE>读取文件内容</TITLE> </HEAD> <BODY> <CENTER> <FONT SIZE = 5 COLOR = blue>读取文件内容</FONT> </CENTER> <BR> <HR> <BR> <% String path = request.getRealPath("/jsphosting/wenjian"); //取得目前目录在伺服端的实际位置 FileReader fr = new FileReader(path + "\\File.txt"); //建立FileReader变量,并设定由fr变量变数引用 int c = fr.read(); //从文件中读取一个字节 while(c != -1) //判断是否已读到文件的结尾 { out.print((char)c); //输出读取到的数据 c = fr.read(); //从文件中读取数据 if(c == 13) //判断是否为断行字节 { out.print("<BR>"); //输出分行标签 fr.skip(1); //略过一个字节 c = fr.read(); //读取一个字节 } } //关闭文件 fr.close(); %> </BODY> </HTML> |
将数据写入文件
通过调用FILEWRITER对象的WRITE()方法向文件中写入数据
Write.jsp
| <%@ page contentType="text/html; charset=GB2312"%> <%@ page language="java" %> <%@ page import="java.io.*" %> <HTML> <HEAD> <TITLE>将数据写入文件</TITLE> </HEAD> <BODY> <CENTER> <FONT SIZE = 5 COLOR = blue>将数据写入文件</FONT> </CENTER> <BR> <HR> <BR> <% String path = request.getRealPath("/jsphosting/wenjian"); //取得目前目录在伺服端的实际位置 FileWriter fw = new FileWriter(path + "\\File.txt"); //建立FileWrite对象,并设定由fw对象变量引用 //将字串写入文件 fw.write("大家好!"); fw.write("祝大家学习jsp愉快!"); fw.write("希望大家能够深入了解jsp技术!"); fw.close(); //关闭文件 %> <P>写入文件内容为</P> <FONT SIZE = 4 COLOR = red> <% FileReader fr = new FileReader(path + "\\File.txt"); //建立FileReader对象,并设定由fr对象变量引用 BufferedReader br = new BufferedReader(fr); //建立BufferedReader对象,并设定由br对象变量引用 String Line = br.readLine(); //读取一行数据 out.println(Line + "<BR>"); //输出读取得的数据 br.close(); //关闭BufferedReader对象 fr.close(); //关闭文件 %> </FONT> </BODY> </HTML> |
5、小结
输入流的指向称为源,程序从指向源的输入流中读取源中的数据。而输出流的指向是数据要去的目的地,程序通过向输出流中写入数据把信息送往目的地。
FileInputStream和FileReader流都顺序地读取文件,二者的区别是:FileInputStream流以字节(byte)为单位读取文件;FileReader流以字符(char)为单位读取文件。
FileOutStream流和FileWriter 顺序地写文件,二者的区别是:FileOutStream流以字节(byte)为单位写文件;FileWriter流以字符(char)为单位写文件。
RandomAccessFile流的指向既可以作为源也可以作为目的地,在读写文件时可以调用seek方法改变读写位置。

