路径不写,只写文件名,那么使用的相对路径就是java命令执行时所在路径,这个就比较模糊了,因为使用eclipse编译器或者使用java命令行执行JAVA代码,命令的当前路径可能是不一样的,而且你的执行的类有可能在某个包里面,而包在文件系统里被识别为文件夹,那么当前执行路径就又不一样了,甚至哪怕你在eclipse里面把要读写的文件放到了合适的路径下,在开发环境下可以正常读写了,但JAVA工程部署打包的时候,再执行,JAVA命令的当前路径不一样了,又找不到文件了。所以还是建议写绝对路径,或者是不会改变的相对路径,例如获得工程的当前路径之类,举例:
在java类中:
获取当前的classpath的绝对URI路径
thisgetClass()getClassLoader()getResource(“/”)getPath()
thisgetClass()getClassLoader()getResource(“”)getPath()
获取当前类的加载目录,如果有“/”,获取当前类的所在工程路径
thisgetClass()getResource(“”)getPath()
thisgetClass()getResource(“/”)getPath()
项目的绝对路径
thisgetClass()getClassLoader()getResource(“”)getPath();
另一种获取当前的classpath的绝对uri路径的方法
ThreadcurrentThread()getContextClassLoader()getResource(“/”)getPath()
ThreadcurrentThread()getContextClassLoader()getResource(“”)getPath()
项目的绝对路径
ThreadcurrentThread()getContextClassLoader()getResource(“”)getPath()
获取项目的路径
directorygetCanonicalPath()
在servlet中:
得到工程目录(参数具体到包名)
requestgetSession()getServletContext()getRealPath(“”)
得到IE地址栏地址
requestgetRequestURL()
得到相对地址
requestgetRequestURI()
获取站点的绝对路径
requestgetServletContext()getRealPath(“/”)
requestgetRealPath(“/”)
1使用javautilProperties类的load()方法
示例:
//文件在项目下。不是在包下!!
InputStream in = new BufferedInputStream(new FileInputStream("demoproperties")) ;
Properties p = new Properties();
pload(in) ;
String className2 = pgetProperty("databasedriver");
String url = pgetProperty("databaseurl");
String user = pgetProperty("databaseuser");
String password = pgetProperty("databasepass");
2 使用javautilResourcebundle类的getbundle()方法
//前面没有“/”代表当前类的目录
示例:
//文件和类在同一个包下,注意它的文件名和后缀!!是调换的,
ResourceBundle resource = ResourceBundlegetBundle("propertiesjdbc");
String className = resourcegetString("databasedriver");
String url = resourcegetString("databaseurl");
String user = resourcegetString("databaseuser");
String password = resourcegetString("databasepass");
3使用javautilPropertyResourceBundle类的构造函数
示例:
// 文件在项目下 或者 src/demoproperties
// 在 src/demoproperties 写成 new FileInputStream("src/demoproperties")
InputStream in = new BufferedInputStream(new FileInputStream("demoproperties"));
ResourceBundle rb = new PropertyResourceBundle(in) ;
String className4 = rbgetString("databaseurl");
4使用class变量的getresourceasstream()方法
示例:
InputStream in =PropertiesclassgetResourceAsStream("/properties/jdbcproperties");
// 包点类名下的。
// 如果找不到带有该名称的资源,则返回 null
Properties p = new Properties();
pload(in);
Systemoutprintln(pgetProperty("databaseurl"));
5使用classgetclassloader()所得到的javalangclassloader的getresourceasstream()方法
// properties 文件 要放在src下面,否则找不到啊
示例:
InputStream in = 类名classgetClassLoader()getResourceAsStream("jdbcproperties");
Properties p = new Properties() ;
pload(in);
Systemoutprintln(pgetProperty("databasepass"));
6使用javalangclassloader类的getsystemresourceasstream()静态方法
示例:
// 同包名下
InputStream in = ClassLoadergetSystemResourceAsStream("properties/jdbcproperties");
Properties p = new Properties() ;
pload(in) ;
Systemoutprintln(pgetProperty("databaseuser"));
总结:如果是 在WEB上读取properties文件,写成下面这种。上面写的那些只在 JavaSE 中
String path = ThreadcurrentThread()getContextClassLoader()getResource("")getPath();
Systemoutprintln(path);
InputStream in = new FileInputStream(new File(path+Fileseparator+"mysqlproperties"));
Properties prop = new Properties();
以上就是关于java中File类,为什么用new File指向的文件老是为空代码如图,இ௰இ全部的内容,包括:java中File类,为什么用new File指向的文件老是为空代码如图,இ௰இ、JAVA中如何读取src下所有的properties文件、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)