知识大全 Java相对路径读取文件
Posted 文件
篇首语:知识为进步之母,而进步又为富强之源泉。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Java相对路径读取文件相关的知识,希望对你有一定的参考价值。
Java相对路径读取文件 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
不管你是新手还是老鸟 在程序中读取资源文件总会遇到一些找不到文件的问题 这与Java底层的实现有关 不能算bug 只要方法得当 问题还是可以解决的
项目的文件夹结构
repathtest
├─src
│ └─
│ └─lavasoft
│ ├─test
│ └─res
├─doc
在Java开发工具的project中使用相对路径
在project中 相对路径的根目录是project的根文件夹 在此就是repathtest文件夹了
创建文件的写法是
File f = new File( src//lavasoft/res/a txt );
File f = new File( doc/b txt );
注意
路径不以 / 开头
脱离了IDE环境 这个写法就是错误的 也并非每个IDE都如此 但我见到的都是这样的
通过CLASSPATH读取包内文件
读取包内文件 使用的路径一定是相对的classpath路径 比如a 位于包内 此时可以创建读取a的字节流
InputStream in = ReadFile class getResourceAsStream( //lavasoft/res/a txt );
有了字节流 就能读取到文件内容了
注意
这里必须以 / 开头
看看完整的测试代码
package lavasoft test;
import java io *;
/**
* Java读取相对路径的文件
*
* @author leizhimin : :
*/
public class ReadFile
public static void main(String[] args)
readTextA_ByClassPath();
readTextA_ByProjectRelativePath();
readTextB_ByProjectRelativePath();
/**
* 通过工程相对路径读取(包内)文件 注意不以 / 开头
*/
public static void readTextA_ByProjectRelativePath()
System out println( readTextA_ByProjectRelativePath );
File f = new File( src//lavasoft/res/a txt );
String a = file String(f GBK );
System out println(a);
/**
* 通过工程相对路径读取(包外)文件 注意不以 / 开头
*/
public static void readTextB_ByProjectRelativePath()
System out println( readTextB_ByProjectRelativePath );
File f = new File( doc/b txt );
String b = file String(f GBK );
System out println(b);
/**
* 通过CLASSPATH读取包内文件 注意以 / 开头
*/
public static void readTextA_ByClassPath()
System out println( readTextA_ByClassPath );
InputStream in = ReadFile class getResourceAsStream( //lavasoft/res/a txt );
String a = stream String(in GBK );
System out println(a);
/**
* 文件转换为字符串
*
* @param f 文件
* @param charset 文件的字符集
* @return 文件内容
*/
public static String file String(File f String charset)
String result = null;
try
result = stream String(new FileInputStream(f) charset);
catch (FileNotFoundException e)
e printStackTrace();
return result;
/**
* 文件转换为字符串
*
* @param in 字节流
* @param charset 文件的字符集
* @return 文件内容
*/
public static String stream String(InputStream in String charset)
StringBuffer sb = new StringBuffer();
try
Reader r = new InputStreamReader(in charset);
int length = ;
for (char[] c = new char[ ]; (length = r read(c)) != ;)
sb append(c length);
r close();
catch (UnsupportedEncodingException e)
e printStackTrace();
catch (FileNotFoundException e)
e printStackTrace();
catch (IOException e)
e printStackTrace();
return sb toString();
(代码写得粗糙 异常没做认真处理)
运行结果
readTextA_ByClassPath
aaaaaaaaa
sssssssss
readTextA_ByProjectRelativePath
aaaaaaaaa
sssssssss
readTextB_ByProjectRelativePath
bbbbbbbbbbb
Process finished with exit code
这是通过IDEA开发工具运行的 结果没问题 如果换成控制台执行 那么使用了项目相对路径的读取方式会失败 原因是 此时已经脱离了项目的开发环境 这个问题常常困扰著一些菜鸟 代码在开发工具好好的 发布后执行就失败了!
下面我截个图
获取CLASSPATH下文件的绝对路径
当使用相对路径写入文件时候 就需要用到绝对路径 下面是个例子
package lavasoft;
import java io File;
/**
* CLASSPATH文件的绝对路径获取测试
*
* @author leizhimin : :
*/
public class Test
//classpath的文件路径
private static String cp = //lavasoft/cfg/syscfg properties ;
public static void main(String[] args)
//当前类的绝对路径
System out println(Test class getResource( / ) getFile());
//指定CLASSPATH文件的绝对路径
System out println(Test class getResource(cp) getFile());
//指定CLASSPATH文件的绝对路径
File f = new File(Test class getResource(cp) getFile());
System out println(f getPath());
输出
/D:/projects/bbt/code/cdn/planrpt/out/production/planrpt/
/D:/projects/bbt/code/cdn/planrpt/out/production/planrpt//lavasoft/cfg/syscfg properties
D:\\projects\\bbt\\code\\cdn\\planrpt\\out\\production\\planrpt\\\\lavasoft\\cfg\\syscfg properties
Process finished with exit code
总结
使用工程相对路径是靠不住的
使用CLASSPATH路径是可靠的
cha138/Article/program/Java/hx/201311/27002相关参考
java读取文本文件的方法有很多这个例子主要介绍最简单最常用的BufferedReader类 完整例子如下 packagenetchinaunixbloghzmtext; impor
JAVA如何实现从最后一行读取文件 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! JAVA如何实
使用javautilProperties类的load()方法 示例 InputStreamin=newBufferedInputStream(newFileInputStream(name))
以下是实现的代码cha138/Article/program/Java/hx/201311/26965
JAVA读取xml文件中节点值 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! importwcd
publicclassReadSql publicstaticvoidreadsql(StringfilePath)throwsException Stringencoding=gbk; F
Java读取xml文件的四种方法 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! xml文件 X
用Java多线程实现无阻塞读取远程文件 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 我是不怎么
有时候我们需要将读取文件的内容到一个byte[]数组中然后对这个数组进行一些修改这时我们可以借助于ByteArrayOutputStream这个类来实现 ByteArrayOutputStrea
Java对话框获取目录、文件路径 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! publicFi