JAVA里文件路经获取转化.简单代码

本文提供了一段Java代码,用于从类中获取其所在文件的路径。该方法能够处理类路径为本地文件系统、JAR包或ZIP文件的情况,并能确保返回的路径为规范形式,便于后续文件操作。
public static String getPathFromClass(Class cls) throws IOException {
String path = null;
if (cls == null) {
throw new NullPointerException();
}
URL url = getClassLocationURL(cls);
if (url != null) {
path = url.getPath();
if ("jar".equalsIgnoreCase(url.getProtocol())) {
try {
path = new URL(path).getPath();
} catch (MalformedURLException e) {
}
int location = path.indexOf("!/");
if (location != -1) {
path = path.substring(0, location);
}
}
File file = new File(path);
path = file.getCanonicalPath();
}
return path.substring(0, path.lastIndexOf(File.separator)+1);
}


private static URL getClassLocationURL(final Class cls) {
if (cls == null)
throw new IllegalArgumentException("null input: cls");
URL result = null;
final String clsAsResource = cls.getName().replace('.', '/').concat(".class");
final ProtectionDomain pd = cls.getProtectionDomain();

if (pd != null) {
final CodeSource cs = pd.getCodeSource();

if (cs != null)
result = cs.getLocation();

if (result != null) {
if ("file".equals(result.getProtocol())) {
try {
if (result.toExternalForm().endsWith(".jar")
|| result.toExternalForm().endsWith(".zip"))
result = new URL("jar:".concat(
result.toExternalForm()).concat("!/")
.concat(clsAsResource));
else if (new File(result.getFile()).isDirectory())
result = new URL(result, clsAsResource);
} catch (MalformedURLException ignore) {
}
}
}
}

if (result == null) {
final ClassLoader clsLoader = cls.getClassLoader();
result = clsLoader != null ? clsLoader.getResource(clsAsResource)
: ClassLoader.getSystemResource(clsAsResource);
}
return result;
}
<think>好的,用户的问题是如何使用伪静态规则重写文件路径。首先,我需要回忆一下伪静态的基本概念和相关技术。伪静态主要是通过服务器配置,将动态的URL转换为看起来像静态路径的形式,这对SEO和用户体验都有好处。用户提到的是修改文件路径,可能是指隐藏真实的文件路径,或者让URL更友好。 根据用户提供的引用,特别是引用[1]中的Go语言示例,还有引用[2]和[3]中关于ThinkPHP的配置,以及Apache和IIS的规则,我需要整理不同服务器环境下的实现方法。用户可能需要具体的步骤,比如在Apache中使用.htaccess,或者在Nginx中配置,还有IIS的情况。同时,用户可能关心如何检查文件是否存在再决定是否重写,这类似于引用[1]中的逻辑,先判断文件是否存在,再决定是否提供静态文件或进行重写。 接下来,我需要考虑用户的实际应用场景。例如,用户可能有一个网站,希望将类似/public/about.html的路径重写为/about,这样URL更简洁。这时候需要编写对应的重写规则,确保服务器能正确指向真实文件,同时处理不存在的路径,可能需要转发到前端控制器如index.php。 还要注意不同服务器的语法差异。比如Apache的RewriteRule,Nginx的rewrite指令,IIS的URL重写模块。需要分别给出示例,确保用户能根据自己使用的服务器类型找到合适的配置方法。 另外,用户可能对如何测试和验证这些规则有疑问,所以应该提醒他们检查配置是否正确,是否有语法错误,以及如何调试。例如,在Apache中开启RewriteLog,或者在Nginx中查看错误日志。 最后,需要生成相关问题,帮助用户深入理解。可能的问题包括性能优化、特定框架的配置、常见错误处理等。这些问题应该覆盖用户可能遇到的后续疑问,帮助他们进一步应用伪静态技术。</think>### 伪静态规则实现文件路径重写的方法 伪静态通过URL重写技术将动态路径转换为静态形式,以下是不同服务器环境下的具体实现方法: --- #### 一、Apache服务器(.htaccess) **核心逻辑**:检查请求路径是否对应真实文件,若不存在则重定向到前端控制器[^2][^3] ```apache RewriteEngine On # 忽略已存在的文件/目录 RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d # 将路径重写到子目录/public RewriteRule ^(.*)$ /public/$1 [L] ``` --- #### 二、Nginx服务器 **配置要点**:在`server`块中添加重写规则,优先验证文件存在性[^4][^5] ```nginx location / { try_files $uri $uri/ /public/$uri; } ``` --- #### 三、IIS服务器(Web.config) **实现步骤**: 1. 安装URL重写模块 2. 添加规则模板: ```xml <rule name="Static Path Rewrite"> <match url="^(.*)$" /> <conditions> <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /> <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" /> </conditions> <action type="Rewrite" url="/public/{R:1}" /> </rule> ``` --- #### 四、框架集成方案(以ThinkPHP为例) ```apache # 实现/public/news/1 → /public/index.php/news/1 RewriteRule ^public/(.*)$ public/index.php/$1 [QSA,PT,L] ``` --- ### 验证配置是否生效的方法 1. 访问`/about`应返回`/public/about.html`内容 2. 不存在的路径应显示404页面 3. 检查服务器日志中的重写过程 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值