在Java中用File对象来创建文件时,绝对路径一般是不会出现什么问题的,如果使用相对路径,则有可能出现意向不到的问题。
比如我在Java基础——输入/输出(二)中的程序:
import java.io.*; public class FileInputStreamTest { public static void main(String[] args) throws IOException { // 创建字节输入流 FileInputStream fis = new FileInputStream( "FileInputStreamTest.java"); // 创建一个长度为1024的“竹筒” byte[] bbuf = new byte[1024]; // 用于保存实际读取的字节数 int hasRead = 0; // 使用循环来重复“取水”过程 while ((hasRead = fis.read(bbuf)) > 0 ) { // 取出“竹筒”中水滴(字节),将字节数组转换成字符串输入! System.out.print(new String(bbuf , 0 , hasRead )); } // 关闭文件输入流,放在finally块里更安全 fis.close(); } }
运行会出现异常:
Exception in thread "main" java.io.FileNotFoundException: FileInputStreamTest.java (系统找不到指定的文件。) at java.io.FileInputStream.open(Native Method) at java.io.FileInputStream.<init>(FileInputStream.java:138) at java.io.FileInputStream.<init>(FileInputStream.java:97) at FileInputStreamTest.main(FileInputStreamTest.java:8)
在此,java.io默认情况下用当前目录来分析相对路径名,定位到当前用户目录下("user.dir"),即工程目录D:\j2se1\testWorkspace\Test1234下,因此 此时的相对路径(以当前用户目录为基础)为"src/FileInputStreamTest.java",这样JVM就根据用户当前目录(user.dir) 和"src/FileInputStreamTest.java"得到完整路径,即绝对路径,从而找到相应的文件,需要注意的是相对路径的起始处无斜杠“/”。
import java.io.*; public class FileInputStreamTest { public static void main(String[] args) throws IOException { // 创建字节输入流 FileInputStream fis = new FileInputStream( "src/FileInputStreamTest.java"); // 创建一个长度为1024的“竹筒” byte[] bbuf = new byte[1024]; // 用于保存实际读取的字节数 int hasRead = 0; // 使用循环来重复“取水”过程 while ((hasRead = fis.read(bbuf)) > 0 ) { // 取出“竹筒”中水滴(字节),将字节数组转换成字符串输入! System.out.print(new String(bbuf , 0 , hasRead )); } // 关闭文件输入流,放在finally块里更安全 fis.close(); } }
运行结果为:
import java.io.*; public class FileInputStreamTest { public static void main(String[] args) throws IOException { // 创建字节输入流 FileInputStream fis = new FileInputStream( "src/FileInputStreamTest.java"); // 创建一个长度为1024的“竹筒” byte[] bbuf = new byte[1024]; // 用于保存实际读取的字节数 int hasRead = 0; // 使用循环来重复“取水”过程 while ((hasRead = fis.read(bbuf)) > 0 ) { // 取出“竹筒”中水滴(字节),将字节数组转换成字符串输入! System.out.print(new String(bbuf , 0 , hasRead )); } // 关闭文件输入流,放在finally块里更安全 fis.close(); } }