关于Java文件路径问
题
快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题
Java
1.
常用:字符串类型:System.getProperty("user.dir");
综合:
lin.lin.lin;
java.io.File;
Test {
main(String[] args) Exception {
System.out.println(Thread.currentThread().getContextClassLoader().getResource(""));
System.out.println(Test..getClassLoader().getResource(""));
System.out.println(ClassLoader.getSystemResource(""));
System.out.println(Test..getResource(""));
System.out.println(Test..getResource("/"));
System.out.println( File("").getAbsolutePath());
System.out.println(System.getProperty("user.dir"));
/*
file:/E:/workspaces/ys/WebRoot/WEB-INF/classes/
file:/E:/workspaces/ys/WebRoot/WEB-INF/classes/
file:/E:/workspaces/ys/WebRoot/WEB-INF/classes/
file:/E:/workspaces/ys/WebRoot/WEB-INF/classes/lin/lin/lin/
file:/E:/workspaces/ys/WebRoot/WEB-INF/classes/
E:\workspaces\ys
E:\workspaces\ys
*/
}
}
2.Web
(1).Weblogic
WebApplication的系统文件根目录是你的weblogic安装所在根目录。 例如:如果你的weblogic安装在c:\bea\weblogic700.....
那么,你的文件根路径就是c:\.
所以,有两种方式能够让你访问你的服务器端的文件: a.使用绝对路径:
比如将你的参数文件放在c:\yourconfig\yourconf.properties, 直接使用 new FileInputStream("yourconfig/yourconf.properties");
b.使用相对路径:
相对路径的根目录就是你的webapplication的根路径,即WEB-INF的上一级目录,将你的参数文件放在yourwebapp\yourconfig\yourconf.properties, 这样使用:new FileInputStream("./yourconfig/yourconf.properties");
这两种方式均可,自己选择。
(2).Tomcat
在类中输出System.getProperty("user.dir");显示的是%Tomcat_Home%/bin
(3).Resin
不是你的JSP放的相对路径,是JSP引擎执行这个JSP编译成SERVLET的路径为根.比如用
新建文件法测试File f = new File("a.htm");
这个a.htm在resin的安装目录下
(4).
在Java文件中getResource或getResourceAsStream均可 例:getClass().getResourceAsStream(filePath);//filePath可以是"/filename",这里的/代表web发
布根路径下WEB-INF/classes
(5).
string file_real_path=request.getRealPath("mypath/filename");
通常使用request.getRealPath("/");
3.
lin.lin.lin;
java.io.*;
java.net.*;
/**
* 此类中封装一些常用的文件操作。 所有方法都是静态方法,不需要生成此类的实例, 为避免生成此类
的实例,构造方法被申明为private类型的。
*
* 0.1
*/
FileUtil {
/**
* 私有构造方法,防止类的实例化,因为工具类不需要实例化。
*/
FileUtil() {
}
/**
* 修改文件的最后访问时间。 如果文件不存在则创建该文件。
*
目前这个方法的行为方式还不稳定,主要是方法有些信息输出,这些信息输出是否保留还在考
虑中。
*
* file
* 需要修改最后访问时间的文件。
* 0.1
*/
touch(File file) {
currentTime = System.currentTimeMillis();
(!file.exists()) {
System.err.println("file not found:" + file.getName());
System.err.println("Create a new file:" + file.getName());
{
(file.createNewFile()) {
// System.out.println("Succeeded!");
} {
// System.err.println("Create file failed!");
}
} (IOException e) {
// System.err.println("Create file failed!");
e.printStackTrace();
}
}
result = file.setLastModified(currentTime);
(!result) {
// System.err.println("touch failed: " + file.getName());
}
}
/**
* 修改文件的最后访问时间。 如果文件不存在则创建该文件。
目前这个方法的行为方式还不稳定,主要是方法有些信息输出,这些信息输出是否保留还在考虑中。
*
* fileName
* 需要修改最后访问时间的文件的文件名。
* 0.1
*/
touch(String fileName) {
File file = File(fileName);
touch(file);
}
/**
* 修改文件的最后访问时间。 如果文件不存在则创建该文件。
目前这个方法的行为方式还不稳定,主要是方法有些信息输出,这些信息输出是否保留还在考虑中。
*
* files
* 需要修改最后访问时间的文件数组。
* 0.1
*/
touch(File[] files) {
( i = 0; i < files.length; i++) {
touch(files[i]);
}
}
/**
* 修改文件的最后访问时间。 如果文件不存在则创建该文件。
目前这个方法的行为方式还不稳定,主要是方法有些信息输出,这些信息输出是否保留还在考虑中。
*
* fileNames
* 需要修改最后访问时间的文件名数组。
* 0.1
*/
touch(String[] fileNames) {
File[] files = File[fileNames.length];
( i = 0; i < fileNames.length; i++) {
files[i] = File(fileNames[i]);
} touch(files); }
/**
* 判断指定的文件是否存在。
*
* fileName
* 要判断的文件的文件名
* 存在时返回true,否则返回false。
* 0.1
*/
isFileExist(String fileName) {
File(fileName).isFile();
}
/**
* 创建指定的目录。 如果指定的目录的父目录不存在则创建其目录树上所有需要的父目录。
注
意:可能会在返回false的时候创建部分父目录。
*
* file
* 要创建的目录
* 完全创建成功时返回true,否则返回false。
* 0.1
*/
makeDirectory(File file) {
file.mkdirs();
}
/**
* 创建指定的目录。 如果指定的目录的父目录不存在则创建其目录
书
关于书的成语关于读书的排比句社区图书漂流公约怎么写关于读书的小报汉书pdf
上所有需要的父目录。
注
意:可能会在返回false的时候创建部分父目录。
*
* fileName
* 要创建的目录的目录名
* 完全创建成功时返回true,否则返回false。
* 0.1
*/
makeDirectory(String fileName) {
File file = File(fileName);
makeDirectory(file);
}
/**
* 清空指定目录中的文件。 这个方法将尽可能删除所有的文件,但是只要有一个文件没有被删除都
会返回false。
* 另外这个方法不会迭代删除,即不会删除子目录及其内容。
*
* directory
* 要清空的目录
* 目录下的所有文件都被成功删除时返回true,否则返回false.
* 0.1
*/
emptyDirectory(File directory) {
result = ;
File[] entries = directory.listFiles();
( i = 0; i < entries.length; i++) {
System.out.println(entries[i].getName());
(!entries[i].delete()) {
result = ;
}
}
result;
}
/**
* 清空指定目录中的文件。 这个方法将尽可能删除所有的文件,但是只要有一个文件没有被删除都
会返回false。
* 另外这个方法不会迭代删除,即不会删除子目录及其内容。
*
* directoryName
* 要清空的目录的目录名
* 目录下的所有文件都被成功删除时返回true,否则返回false。
* 0.1
*/
emptyDirectory(String directoryName) {
File dir = File(directoryName);
emptyDirectory(dir);
}
/**
* 删除指定目录及其中的所有内容。
*
* dirName
* 要删除的目录的目录名
* 删除成功时返回true,否则返回false。
* 0.1
*/
deleteDirectory(String dirName) { deleteDirectory( File(dirName)); }
/**
* 删除指定目录及其中的所有内容。
*
* dir
* 要删除的目录
* 删除成功时返回true,否则返回false。
* 0.1
*/
deleteDirectory(File dir) {
((dir == ) || !dir.isDirectory()) {
IllegalArgumentException("Argument " + dir+ " is not a directory. ");
}
File[] entries = dir.listFiles();
sz = entries.length;
( i = 0; i < sz; i++) {
(entries[i].isDirectory()) {
(!deleteDirectory(entries[i])) {
;
}
} {
(!entries[i].delete()) {
;
}
}
}
(!dir.delete()) {
;
}
;
}
/**
* 返回文件的URL地址。
*
* file
* 文件
* 文件对应的的URL地址
* MalformedURLException
* 0.4
* 在实现的时候没有注意到File类本身带一个toURL方法将文件路径转换为URL。 请使
用File.toURL方法。
*/
URL getURL(File file) MalformedURLException {
String fileURL = "file:/" + file.getAbsolutePath();
URL url = URL(fileURL);
url;
}
/**
* 从文件路径得到文件名。
*
* filePath
* 文件的路径,可以是相对路径也可以是绝对路径
* 对应的文件名
* 0.4
*/
String getFileName(String filePath) {
File file = File(filePath);
file.getName();
}
/**
* 从文件名得到文件绝对路径。
*
* fileName
* 文件名
* 对应的文件路径
* 0.4
* 只能得到工程所在目录的路径 例如工程所在路径 E:\workspaces\ys,那么
FileUtil.getFilePath("filed.txt")则为E:\workspaces\ys\filed.txt
*/
String getFilePath(String fileName) {
File file = File(fileName);
file.getAbsolutePath();
}
/**
* 将DOS/Windows格式的路径转换为UNIX/Linux格式的路径。
* 其实就是将路径中的"\"全部换为"/",因为在某些情况下我们转换为这种方式比较方便,
* 某中程度上说"/"比"\"更适合作为路径分隔符,而且DOS/Windows也将它当作路径分隔符。
*
* filePath
* 转换前的路径
* 转换后的路径
* 0.4
*/
String toUNIXpath(String filePath) {
filePath.replace('\\', '/');
}
/**
* 从文件名得到UNIX风格的文件绝对路径。
*
* fileName
* 文件名
* 对应的UNIX风格的文件路径
* 0.4
* #toUNIXpath(String filePath) toUNIXpath
* 只能得到工程所在目录的路径 例如工程所在路径 E:\workspaces\ys,那么
FileUtil.getFilePath("filed.txt")则为E:/workspaces/ys/filed.txt *
*/
String getUNIXfilePath(String fileName) {
File file = File(fileName);
toUNIXpath(file.getAbsolutePath());
}
/**
* 得到文件的类型。 实际上就是得到文件名中最后一个“.”后面的部分。
*
* fileName
* 文件名
* 文件名中的类型部分
* 0.5
*/
String getTypePart(String fileName) {
point = fileName.lastIndexOf('.');
length = fileName.length();
(point == -1 || point == length - 1) {
"";
} {
fileName.substring(point + 1, length);
}
}
/**
* 得到文件的类型。 实际上就是得到文件名中最后一个“.”后面的部分。
*
* file
* 文件
* 文件名中的类型部分
* 0.5
*/
String getFileType(File file) {
getTypePart(file.getName());
}
/**
* 得到文件的名字部分。 实际上就是路径中的最后一个路径分隔符后的部分。
*
* fileName
* 文件名
* 文件名中的名字部分
* 0.5
*/
String getNamePart(String fileName) {
point = getPathLsatIndex(fileName);
length = fileName.length();
(point == -1) {
fileName;
} (point == length - 1) {
secondPoint = getPathLsatIndex(fileName, point - 1);
(secondPoint == -1) {
(length == 1) {
fileName;
} {
fileName.substring(0, point);
}
} {
fileName.substring(secondPoint + 1, point);
}
} {
fileName.substring(point + 1);
}
}
/**
* 得到文件名中的父路径部分。 对两种路径分隔符都有效。 不存在时返回""。
* 如果文件名是以路径分隔符结尾的则不考虑该分隔符,例如"/path/"返回""。
*
* fileName
* 文件名
* 父路径,不存在或者已经是父目录时返回""
* 0.5
*/
String getPathPart(String fileName) {
getPathLsatIndex(fileName); point =
length = fileName.length();
(point == -1) {
"";
} (point == length - 1) {
secondPoint = getPathLsatIndex(fileName, point - 1);
(secondPoint == -1) {
"";
} {
fileName.substring(0, secondPoint);
}
} {
fileName.substring(0, point);
}
}
/**
* 得到路径分隔符在文件路径中首次出现的位置。 对于DOS或者UNIX风格的分隔符都可以。
*
* fileName
* 文件路径
* 路径分隔符在路径中首次出现的位置,没有出现时返回-1。
* 0.5
*/
getPathIndex(String fileName) {
point = fileName.indexOf('/');
(point == -1) {
point = fileName.indexOf('\\');
}
point;
}
/**
* 得到路径分隔符在文件路径中指定位置后首次出现的位置。 对于DOS或者UNIX风格的分隔符都可
以。
*
* fileName
* 文件路径
* fromIndex
* 开始查找的位置
* 路径分隔符在路径中指定位置后首次出现的位置,没有出现时返回-1。
* 0.5
*/
getPathIndex(String fileName, fromIndex) {
point = fileName.indexOf('/', fromIndex);
(point == -1) {
point = fileName.indexOf('\\', fromIndex);
}
point;
}
/**
* 得到路径分隔符在文件路径中最后出现的位置。 对于DOS或者UNIX风格的分隔符都可以。
*
* fileName
* 文件路径
* 路径分隔符在路径中最后出现的位置,没有出现时返回-1。
* 0.5
*/
getPathLsatIndex(String fileName) {
point = fileName.lastIndexOf('/');
(point == -1) {
point = fileName.lastIndexOf('\\');
}
point;
}
/**
* 得到路径分隔符在文件路径中指定位置前最后出现的位置。 对于DOS或者UNIX风格的分隔符都可
以。
*
* fileName
* 文件路径
* fromIndex
* 开始查找的位置
* 路径分隔符在路径中指定位置前最后出现的位置,没有出现时返回-1。
* 0.5
*/
getPathLsatIndex(String fileName, fromIndex) {
point = fileName.lastIndexOf('/', fromIndex);
(point == -1) {
point = fileName.lastIndexOf('\\', fromIndex);
}
point;
}
/**
* 将文件名中的类型部分去掉。
*
* filename
* 文件名
* 去掉类型部分的结果
* 0.5
*/
String trimType(String filename) {
index = filename.lastIndexOf(".");
(index != -1) {
filename.substring(0, index);
} {
filename;
}
}
/**
* 得到相对路径。 文件名不是目录名的子节点时返回文件名。
*
* pathName
* 目录名
* fileName
* 文件名
* 得到文件名相对于目录名的相对路径,目录下不存在该文件时返回文件名
* 0.5
*/
String getSubpath(String pathName, String fileName) {
index = fileName.indexOf(pathName);
System.out.println(index);
(index != -1) {
fileName.substring(index + pathName.length() + 1);
} {
fileName;
}
}
}
4.
目前new FileInputStream()只会使用绝对路径,相对没用过,因为要相对于web服务器地址,比较麻烦
还不如写个配置文件来的快哪
5.Java
配置文件是应用系统中不可缺少的,可以增加程序的灵活性。java.util.Properties是从jdk1.2就有的类,一直到现在都支持load ()方法,jdk1.4以后save(output,string) ->store(output,string)。如果只是单纯的读,根本不存在烦恼的问题。web层可以通过 Thread.currentThread().getContextClassLoader().getResourceAsStream("xx.properties") 获取;Application可以通过new FileInputStream("xx.properties");直接在classes一级获取。关键是有时我们需要通过web修改配置文件,我们不能将路径写死了。经过测试觉得有以下心得:
1.servlet
如果运用Struts 或者Servlet可以直接在初始化参数中配置,调用时根据servlet的getRealPath("/")获取真实路径,再根据String file = this.servlet.getInitParameter("abc");获取相对的WEB-INF的相对路径。
例:
InputStream input =
Thread.currentThread().getContextClassLoader().getResourceAsStream("abc.properties");
Properties prop = new Properties();
prop.load(input);
input.close();
OutputStream out = new FileOutputStream("filepath");
prop.setProperty("abc", "test");
prop.store(out, "–test–");//-test-为注释
out.close();
2.jsp
通过jsp内置对象获取可操作的绝对地址。
例:
// jsp页面
String path = pageContext.getServletContext().getRealPath("/");
String realPath = path+"/WEB-INF/classes/abc.properties";