知识大全 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读取文本文件代码

java读取文本文件的方法有很多这个例子主要介绍最简单最常用的BufferedReader类    完整例子如下    packagenetchinaunixbloghzmtext;    impor

知识大全 JAVA如何实现从最后一行读取文件

JAVA如何实现从最后一行读取文件  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  JAVA如何实

知识大全 java 读取properties 文件

  使用javautilProperties类的load()方法  示例  InputStreamin=newBufferedInputStream(newFileInputStream(name))

知识大全 java读取文件夹下的所有文件夹和文件

  以下是实现的代码cha138/Article/program/Java/hx/201311/26965

知识大全 JAVA读取xml文件中节点值

JAVA读取xml文件中节点值  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  importwcd

知识大全 java io读取文本文件

  publicclassReadSql  publicstaticvoidreadsql(StringfilePath)throwsException  Stringencoding=gbk;  F

知识大全 Java读取xml文件的四种方法

Java读取xml文件的四种方法  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  xml文件  X

知识大全 用Java多线程实现无阻塞读取远程文件

用Java多线程实现无阻塞读取远程文件  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  我是不怎么

知识大全 java读取文件内容写入到byte数组中

  有时候我们需要将读取文件的内容到一个byte[]数组中然后对这个数组进行一些修改这时我们可以借助于ByteArrayOutputStream这个类来实现  ByteArrayOutputStrea

知识大全 Java对话框获取目录、文件路径

Java对话框获取目录、文件路径  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  publicFi