最近在项目中想使用相对路径存放上传的apk包,所以研究了一下相对路径创建File的相关知识
1 参考以前的代码,写下如下代码:
public static void main(String[] args) throws IOException { File parentFile = new File("/intelStore/apk/test"); if (!parentFile.exists()) { parentFile.mkdir(); } System.out.println(parentFile.getAbsolutePath()); File newFile = new File("/intelStore/apk/my.txt"); if (!newFile.exists()) { newFile.createNewFile(); } System.out.println(newFile.getAbsolutePath()); }
打印结果:
F:\intelStore\apk\test Exception in thread "main" java.io.IOException: 系统找不到指定的路径。
在以前的项目中此段代码不会报错,自己写测试的时候会报错,在创建my.txt文件时会提示不存在此路径,可是代码已经创建父路径的文件夹了啊,然后单独允许如下代码:
public static void main(String[] args) throws IOException {
File parentFile = new File("/intelStore/apk/test"); if (!parentFile.exists()) { parentFile.mkdir(); } System.out.println(parentFile.getAbsolutePath()); }
打印结果:
F:\intelStore\apk\test
到F盘去查看根本没有生成intelStore文件夹,仔细考虑了下,可能是java无法创建一个多层均不存在的文件夹目录,
然后运行如下的代码:
File parentFile = new File("/intelStore/apk/test"); if (!parentFile.exists()) { parentFile.mkdir(); } System.out.println(parentFile.getAbsolutePath()); }
发现此时可以创建文件夹intelStore,说明上面的猜想是对的,于是写了一个递归方法,去创建这样多层不存在的文件夹:
public static void createFile (File file) { if (!Objects.equals(file, null)) { createFile(file.getParentFile()); if (!file.exists()) { file.mkdir(); } } }
2 相对路径
看网上说在Eclipse里创建相对路径的文件夹,文件夹的绝对路径为:workspace路径+ 项目+ 相对路径,可是经我测试如下代码:
public static void main(String[] args) throws IOException { File parentFile = new File("/intelStore/apk/test"); System.out.println(parentFile.getAbsolutePath()); createFile(parentFile); }
打印结果为:
F:\intelStore\apk\test
上面代码执行以后确实在F盘下创建了对应的文件夹
我项目的workspace路径为:F:\newWorkspace\readLocalPhoto,也就是说绝对路径并没有创建在workspace里的项目文件夹下,而是在项目所在根路径下创建的相对路径
关于在tomcat里的web项目里运行此代码,网上很多人的说法是,会在tomcat的bin路径下创建相对路径,我在一个servlet里运行如下代码,
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { File parentFile = new File("/intelStore/apk/test"); System.out.println(parentFile.getAbsolutePath()); createFile(parentFile); }
结果:
D:\intelStore\apk\test
并且在D盘下找到了创建的路径
我的tomcat的路径在D盘下的某个文件夹,所以我感觉在tomcat的web里运行,相对路径应该创建在tomcat所在根目录下创建相对路径
3 File Path
在创建相对路径的File时,想使用jdk新特性Path来进行相关操作,代码如下:
public static void main(String[] args) throws IOException { Path path = Paths.get("/intelStore/apk/test"); System.out.println(path.toFile().getAbsolutePath()); createFile(path); } public static void createFile(Path path) { int nameCount = path.getNameCount(); for (int index = 0; index < nameCount; index++) { System.out.println(path.getName(index).toFile().getAbsolutePath()); } }
打印结果:
F:\intelStore\apk\test F:\newWorkspace\NIODemo\intelStore F:\newWorkspace\NIODemo\apk F:\newWorkspace\NIODemo\test
通过上面的代码发现,在使用相对路径的File和Path相互转换时,Path按照名称进行分割,会出现和File对应的路径不一致的情况
而且分割后的Path会在workspace下的当前项目路径文件夹来存放相对路径,而不是项目所在的根路径来创建相对路径
相关推荐
文中指出尽量不要使用相对于System.getProperty(\\\"user....使用上面 ClassLoaderUtil类的public static URL getExtendResource(String relativePath)方法已经能够使用相对于classpath的相对路径定位所有位置的资源。
从相对路径计算绝对路径。 适用于 windows 和 linux。 改进了 Jochen Lenz ( http://www.mathworks.com/matlabcentral/fileexchange/3857-absolutepath-m ) 的绝对路径。
通过验证解决相对于根路径的相对路径。 该模块可以防止普通攻击,例如到达根文件夹外部的GET /../file.js 。 安装 这是可通过使用的模块。 使用完成 : $ npm install resolve-path 原料药 var resolvePath = ...
GetFullPath - 获取文件或文件夹名称的绝对路径此函数将部分或相对名称转换为绝对完整路径名称。 快速 Mex 仅适用于 Windows,但 M 文件可在 Windows、MacOS 和 Unix 上运行。 FullName = GetFullPath(名称,样式)...
文件名 获取文件路径的基本名称(不包括扩展名)。 因为我已经多次键入以下内容: function filename ( fp ) { ... 在本机node.js的回落path.parse方法,如果...|:从文件到目录中获取从路径中的相对文件路径,以路径B.
getfullpath 重建文件夹或文件的完整路径,从它的相对路径。 它已经在 Linux 上进行了测试,但它应该可以在 Windows 和 Mac 上正常工作出色地。 句法: fpath=getfullpath(relative_file_or_dir_name) 范例1: ...
路径相等 无论平台如何,都比较文件路径。... 该库将无法访问文件系统,因此将绝对路径与相对路径进行比较将失败。 贡献 # after fork and clone yarn # begin making changes git checkout -b yar
默认情况下,tarfile 打包成的 tar.gz 文件会带绝对路径,而很多情况下,我们需要的是相对打包文件夹的路径。 代码: <pre name=code class=python><span xss=removed>import tarfile tmp_tar_dir = /home file_name...
复制代码代码如下: define(‘ROOT_PATH’,dirname(__FILE__)); include(ROOT_PATH.”/inc/webconfig.php”); include(ROOT_PATH.”/inc/sysinfo.php”); include(ROOT_PATH.”/inc/functions.php”); include(ROOT_...
在早期的 Java 版本中,文件 IO 操作功能一直相对较弱,主要存在以下...Path 路径:Paths 模块和 Path 工具类介绍 Files 文件:File 和 FileSystems 工具类介绍 文件管理服务:WatchService 、PathMatcher 等等文件服务
在php命令行下执行.php文件时,执行环境的工作目录(getcwd( ))是php命令程序(php.exe)所在目录,所以如果想在文件内使用相对路径时,要先切换当前的工作目录才行。 小测试程序: 复制代码 代码如下: <?php ...
//必须使用绝对路径,使用相对路径会直接下载文件 let path =ROOT_PATH+params.url; let stat = fs.statSync(path); //获取文件信息 let fileSize = stat.size; let range = req.headers.range; if (range) { ...
* @param relativePath 相对路径,默认为空 * @param directory 文件或目录的绝对路径 * void */ public static void zip(String zipFileName, String relativePath, String directory) throws ...
用java实现一个采用用户自定义协议的文件传输服务器FileServer 和客户端FileClient。FileServer于FileClient 都采用非...GET或者PUT 命令中的文件允许采用相对路径,其根路径由用户自定义的FILE_PATH 系统属性指定。
first: php中常用的路径 当前文件路径:D:\...中的set_include_path 在php中,include文件时,当包含路径不为相对也不为绝对时(如:include(“example.php”)),会先查找include_pat
相对读取文件 读取具有相对于当前模块的路径的文件,而不会使样板代码烦人 好吧,我期望@sindresorhus为此提供一个模块,但他没有。 这是怎么回事? 如果您有这样的代码: var fs = require ( 'fs' ) ; var path ...
选择Apply path reduction to personality file entries associated with the project项,为了继续应用相对路径和环境变量在文件路径下的个性定义 选择Remove all path reduction from the project and associated ...
当您想从其关联的 glob 模式中知道文件的相对路径时很有用。 例子 var vinylGlobby = require ( "vinyl-globby" ) ; // Standard interface vinylGlobby ( [ '**/*.js' , '!foo.js' ] , function onGlob ( err , ...
// 使用了classpath:前缀,这样,FileSystemXmlApplicationContext也能够读取classpath下的相对路径 // ApplicationContext factory = new FileSystemXmlApplicationContext("classpath:appcontext.xml"); // ...
/** 定义插件目录(相对路径) */ define('__TYPECHO_PLUGIN_DIR__', '/usr/plugins'); /** 设置包含路径 */ @set_include_path(get_include_path() . PATH_SEPARATOR . __TYPECHO_ROOT_DIR__ . '/var