我们先来用java创建文件,java中文件和文件夹都用File代表
使用绝对路径或相对路径创建File对象
package file;
import java.io.File;
public class TestFile {
public static void main(String[] args) {
// 绝对路径
File f1 = new File("d:/WZFolder");
System.out.println("f1的绝对路径:" + f1.getAbsolutePath());
// 相对路径,相对于工作目录,如果在eclipse中,就是项目目录
File f2 = new File("WZ.exe");
System.out.println("f2的绝对路径:" + f2.getAbsolutePath());
// 把f1作为父目录创建文件对象
File f3 = new File(f1, "WZ.exe");
System.out.println("f3的绝对路径:" + f3.getAbsolutePath());
}
}
这文件跟流有什么关系呢?
流(stream):流就是一系列的数据。
当不同的介质之间有数据交互或交流的时候,java就用流来实现这一过程。
数据源可以是文件,数据库,网络甚至是其他程序。
比如读取文件的数据到程序中,站在程序的角度来说,这就叫做输入流。
输入流(从其他数据源“读入”到程序中):InputStream
输出流(从程序中“写出”到数据源上):OutputStream
建一个文件输入流并从文件中读数据到程序(内存):
package stream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
public class TestStream {
public static void main(String[] args) {
try {
File f = new File("d:/wz.txt");
// 创建基于文件的输入流
FileInputStream fis = new FileInputStream(f);
// 通过这个输入流,就可以把数据从硬盘,读取到Java的虚拟机中来,也就是读取到内存中
byte[] all =new byte[(int) f.length()];
//以字节流的形式读取文件所有内容
fis.read(all);
for (byte b : all) {
//打印出来是65 66
System.out.println(b);
}
//每次使用完流,都应该进行关闭
fis.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
注:1.流不会自动关闭,每次使用后都必须关闭,不然会造成资源浪费
关闭流通常有两处地方:try{}块,finally块,最保险都是在finally块中进行关闭,如果在try中,万一程序出现异常,后面的代码便不会执行,也就不会关闭资源了。但是要注意在finally块中需要对文件引用判空,jdk1.7以后把流放在可以try(这里)也可以自动关闭了
2.注意编码问题
附:文件的常用方法
package file;
import java.io.File;
import java.util.Date;
public class TestFile {
public static void main(String[] args) {
File f = new File("d:/WZFolder/WZ.exe");
System.out.println("当前文件是:" +f);
//文件是否存在
System.out.println("判断是否存在:"+f.exists());
//是否是文件夹
System.out.println("判断是否是文件夹:"+f.isDirectory());
//是否是文件(非文件夹)
System.out.println("判断是否是文件:"+f.isFile());
//文件长度
System.out.println("获取文件的长度:"+f.length());
//文件最后修改时间
long time = f.lastModified();
Date d = new Date(time);
System.out.println("获取文件的最后修改时间:"+d);
//设置文件修改时间为1970.1.1 08:00:00
f.setLastModified(0);
//文件重命名
File f2 =new File("d:/WZFolder/FC.exe");
f.renameTo(f2);
System.out.println("把WZ.exe改名成了FC.exe");
System.out.println("注意: 需要在D:\\WZFolder确实存在一个WZ.exe,\r\n才可以看到对应的文件长度、修改时间等信息");
File f = new File("d:/WZFolder/skin/houyi.ski");
// 以字符串数组的形式,返回当前文件夹下的所有文件(不包含子文件及子文件夹)
f.list();
// 以文件数组的形式,返回当前文件夹下的所有文件(不包含子文件及子文件夹)
File[]fs= f.listFiles();
// 以字符串形式返回获取所在文件夹
f.getParent();
// 以文件形式返回获取所在文件夹
f.getParentFile();
// 创建文件夹,如果父文件夹skin不存在,创建就无效
f.mkdir();
// 创建文件夹,如果父文件夹skin不存在,就会创建父文件夹
f.mkdirs();
// 创建一个空文件,如果父文件夹skin不存在,就会抛出异常
f.createNewFile();
// 所以创建一个空文件之前,通常都会创建父目录
f.getParentFile().mkdirs();
// 列出所有的盘符c: d: e: 等等
f.listRoots();
// 刪除文件
f.delete();
// JVM结束的时候,刪除文件,常用于临时文件的删除
f.deleteOnExit();
}
}