java怎么去除路径最后文件名,获取文件夹路径?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java怎么去除路径最后文件名,获取文件夹路径?相关的知识,希望对你有一定的参考价值。

比如windows下C:\Users\ABC\Desktop\1.jpg,我只需要C:\Users\ABC\Desktop\
再比如unix下/users/ABC/desktop/1.jpg,我只需要/users/ABC/desktop/
要适用于不同系统

我用Sring.split("\\")无法分开windows下的路径不能成功,用“/”可以分开unix的路径能成功
说File.separator的可以停停了,自己去API文档看,这个静态属性是两个斜杠,我不能用这个

import java.io.File;

public class FileDemo 
public static void main(String[] args) 
File file = new File("C:\\\\Users\\\\lenovo\\\\Desktop\\\\user.png");
System.out.println(file.getAbsolutePath());
StringBuilder sb = new StringBuilder();
File temp = file;
while (temp.getParentFile() != null && temp.getParentFile().getName().length() != 0) 
sb.insert(0, "/" + temp.getParentFile().getName());
temp = temp.getParentFile();

sb.append("/");
System.out.println(sb);

输出

C:\\Users\\lenovo\\Desktop\\user.png
/Users/lenovo/Desktop/

file.getParent()表示取得父路径  


如果不用File.separator  还可以先判断操作系统,然后进行字符串操作

Properties props=System.getProperties(); //获得系统属性集    
String osName = props.getProperty("os.name"); //操作系统名称  
if(osName.toLowerCase().contains("windows"))
    //windows 的字符串操作
 else if(.......)
    //其他操作系统的字符串操作

参考技术A 用File.separator去截取吧。最简单,学过io流要学会使用这个来处理跨平台的情况追问

我用过,这个不行,我用的jdk和jre都是1.8.65,File.separator在Windows里是\\不是\

追答

少年,建议你直接学习jdk1.6的,现在企业也就1.5或者1.6的,你直接用1.8的话。到时候哭都没地方哭

java项目中文件的路径

我要做java项目的整理, 我们公司正在做一个很大的项目, 我需要把我正在做的这个模块涉及到的文件以及路径全部整理出来, 请问怎么快速拷贝其文件的路径 如图:

我怎么快速的把这些文件项目的路径拷贝出来, 拷贝到word文档中去

java项目中文件的路径-方法大全

一、 相对路径的获得

说明:相对路径(即不写明时候到底相对谁)均可通过以下方式获得(不论是一般的java项目还是web项目)

System.getProperty("user.dir");

上述相对路径中,java项目中的文件是相对于项目的根目录web项目中的文件路径视不同的web服务器不同而不同(tomcat是相对于tomcat安装目录\\bin)

二 类加载目录的获得(即当运行时某一类时获得其装载目录)
1.1)通用的方法一(不论是一般的java项目还是web项目,先定位到能看到包路径的第一级目录)

InputStreamis=TestAction.class.getClassLoader().getResourceAsStream("test.txt"); (test.txt文件的路径为 项目名\\src\\test.txt;类TestPath所在包的第一级目录位于src目录下)

上式中将TestPath,test.txt替换成对应成相应的类名和文件名字即可

1.2)通用方法二 (此方法和1.1中的方法类似,不同的是此方法必须以\'/\'开头) InputStream is=Test1.class.getResourceAsStream("/test.txt"); 
(test.txt文件的路径为 项目名\\src\\test.txt,类Test1所在包的第一级目录位于src目录下)

三 web项目根目录的获得(发布之后)
1 从servlet出发

可建立一个servlet在其的init方法中写入如下语句(没有请求的话会抛空指针导常)

ServletContext s1=this.getServletContext();
String temp=s1.getRealPath("/"); (关键) 
结果形如:F:\\tomcat-6.0.36\\webapps\\test\\(test为项目名字)

如果是调用了s1.getRealPath("")则输出F:\\tomcat-6.0.36\\webapps\\test(少了一个"\\")

2 从httpServletRequest出发(没有请求的话会抛空指针导常)

String path=request.getSession().getServletContext().getRealPath("/");

结果形如: F:\\tomcat-6.0.36\\webapps\\test\\

 

四 classpath的获取(在Eclipse中为获得src或者classes目录的路径),放在监听器,可以窗口启动获取路径

方法一 Thread.currentThread().getContextClassLoader().getResource("").getPath()

 

    String path = Thread.currentThread().getContextClassLoader()

              .getResource("").getPath();

    System.out.println("path========" + path);输出: path========/F:/tomcat-6.0.36/webapps/test/WEB-INF/classes/


方法二 JdomParse.class.getClassLoader().getResource("").getPath() (JdomParse为src某一个包中的类,下同)

eg:String p1=JdomParse.class.getClassLoader().getResource("").getPath();
System.out.println("JdomParse.class.getClassLoader().getResource--"+p1);

输出:JdomParse.class.getClassLoader().getResource-/F:/tomcat-6.0.36/webapps/test/WEB-INF/classes/

 

另外,如果想把文件放在某一包中,则可以 通过以下方式获得到文件(先定位到该包的最后一级目录)

eg String p2=JdomParse.class.getResource("").getPath(); 
System.out.println("JdomParse.class.getResource---"+p2);

输出:JdomParse.class.getResource--/F:/tomcat-6.0.36/webapps/test/WEB-INF/classes/

 (JdomParse为src目录下jdom包中的类)

四 属性文件的读取:

方法 一

InputStream in = lnewBufferedInputStream( new FileInputStream(name));   

 Properties p = new Properties();   p.load(in);

 

注意路径的问题,做执行之后就可以调用p.getProperty("name")得到对应属性的值

 

方法二

Locale locale =Locale.getDefault(); 
ResourceBundle localResource = ResourceBundle.getBundle("test/propertiesTest",locale); 
String value = localResource.getString("test"); 
System.out.println("ResourceBundle: " + value);

工程src目录下propertiesTest.properties(名字后缀必须为properties)文件内容如下:

test=hello word

不通过Servlet获取路径 

第一种实现

Java代码  

       URL url = ClassLoader.getSystemClassLoader().getResource("./"); 

       File file =new File(url.getPath()); 

       File parentFile =new File(file.getParent()); 

       System.out.println("webRoot:"+parentFile.getParent());

第二种实现 
首先写一个接听类 (推荐使用,容器启动时就执行,不会抛空指针异常,适合做定时器任务来删除服务器文件的路径)

Java代码:

package com.chinacreator.report.listener; 

import javax.servlet.ServletContext;

import javax.servlet.ServletContextEvent;

import javax.servlet.ServletContextListener;

 

/**

 * @authorxiaoqun.yi

 */

public class PathListener implementsServletContextListener

 

    private staticServletContext servletContext;

 

    public voidcontextDestroyed(ServletContextEvent sce)

 

       this.servletContext= sce.getServletContext();

       System.out.println("path=======:"+servletContext.getRealPath("/"));

   

 

    public voidcontextInitialized(ServletContextEvent arg0)

 

   

 


在web.xml中加入如下配置

Java代码 :

<listener>

       <listener-class>com.chinacreator.report.listener.PathListener</listener-class>

    </listener> 

五、Java中的getResourceAsStream有以下几种: 
1. Class.getResourceAsStream(String path) : path 不以’/\'开头时默认是从此类所在的包下取资源,以’/\'开头则是从ClassPath根下获取。其只是通过path构造一个绝对路径,最终还是由 ClassLoader(类加载器)(获取资源)

2. Class.getClassLoader.getResourceAsStream(String path) :默认则是从ClassPath根下获取,path不能以’/\'开头,最终是由ClassLoader获取资源。

3. ServletContext. getResourceAsStream(String path):默认从WebAPP根目录下取资源,Tomcat下path是否以’/\'开头无所谓,当然这和具体的容器实现有关。

4. Jsp下的application内置对象就是上面的ServletContext的一种实现。 

其次,getResourceAsStream 用法大致有以下几种: 

第一: 要加载的文件和.class文件在同一目录下,例如:com.x.y 下有类me.class ,同时有资源文件myfile.xml 

那么,应该有如下代码: 

me.class.getResourceAsStream("myfile.xml"); 

第二:在me.class目录的子目录下,例如:com.x.y 下有类me.class ,同时在 com.x.y.file 目录下有资源文件myfile.xml 

那么,应该有如下代码: 

me.class.getResourceAsStream("file/myfile.xml"); 

第三:不在me.class目录下,也不在子目录下,例如:com.x.y 下有类me.class ,同时在 com.x.file 目录下有资源文件myfile.xml

那么,应该有如下代码: 

me.class.getResourceAsStream("/com/x/file/myfile.xml"); 

总结一下,可能只是两种写法 

第一:前面有 “   / ” 

“ / ”代表了工程的根目录,例如工程名叫做myproject,“ / ”代表了myproject 

me.class.getResourceAsStream("/com/x/file/myfile.xml"); 

第二:前面没有 “   / ” 

代表当前类的目录 

me.class.getResourceAsStream("myfile.xml"); 

me.class.getResourceAsStream("file/myfile.xml");

参考技术A

    相对路径的话,可以先获取到当前文件的编译路径,之后在找到想找文件的路径的思路来实现。

举例:

XMLS.class.getClass().getResourceAsStream("/test/test.txt");

解释:XMLS.class.getClass()是获取当前的类编译路径,之后通过getResourceAsStream的形式即可找到要读取的文件的路径。

    绝对路径的话,可以通过“ 类名.class.getResource("").getPath()”方法实现。

举例:”String path = XMLS.class.getResource("").getPath()“.

解释:以上语句就是获取到XMLS编译后的绝对路径(无法获取到java文件路径的,因为java运行的都是class文件)。

参考技术B /**
* param:directory
* param:fw
* */

public void getPath(String directory, FileWriter fw) throws Exception
File path = new File(directory);
File[] files = path.listFiles();
for (File f : files)
if (f.isDirectory())
getPath(f.getAbsolutePath(), fw);
else
fw.write(f.getAbsolutePath() + "\n");





//调用

FileWriter fw = new FileWriter("C:\\dir.log", true);
getPath("E:\\trunk\\dev\\web", fw);
fw.flush();
fw.close();本回答被提问者和网友采纳

以上是关于java怎么去除路径最后文件名,获取文件夹路径?的主要内容,如果未能解决你的问题,请参考以下文章

java 工程里有配置文件 打包成jar文件 找不到配置文件的路径 这个路径该怎么写!!

cmd多个目录怎么去除一个目录

File获取文件名(去除路径)

File获取文件名(去除路径)

java怎么获取本地文件路径

eclipse中怎么查看classpath路径