提示: Java读取相对路径文件的前提也是相对的。 文件必须位于classpath下。 否则,无法读取任意相对文件。
Java假设读取相对路径文件。 文件必须位于classpath下。 否则,无法读取任意相对文件。
在IDE中创建项目时,通常存在项目的classpath目录src目录。 如果文件位于src目录或其子目录下,则可以在程序代码中使用相对路径进行读取。 这里的相对路径和文件系统的相对路径的概念可能略有不同。
例如:
公共类xmltest {
私有输入流编码(输入流is,字符串编码)。
try {
byte[] b=new byte[1024];
String res=' ';
if(is==null ) {
返回' ';
}
int bytesRead=0;
while (真)。
bytesread=is.read(b,0,1024 ); //return final read bytes counts
if(bytesread==-1 ) ({//end of InputStream
返回RES;
}
RES=新字符串(b,0,bytesRead,encoding );//转换为字符串使用字节
}
}catch(exceptione ) {
e .打印堆栈跟踪(;
system.out.print (exception : ) e;
返回' ';
}
}
publicstaticstringgenwscmd (stringxmlfilename )。
inputstream in=xmltest.class.getclass loader ().getresourceasstream (XML文件名称);
String x=new XmlTest ().inputstreamtostring(in,' UTF-8 ' );
返回x;
}
publicstaticvoidmain (字符串[ ] args ) {
stringout=genwscmd(sys_ds.XML );
system.out.println(out );
}
}
1、sys_ds.xml在src下,路径直接写名字。 但是,请不要写"/sys_ds.xml "。 这是错误的,被视为绝对路径。
2、请注意,将文件sys_ds.xml移动到mypack包下时,路径应该写为mypack/sys_ds.xml,前面没有“/”。
3、必须在ClassLoader中执行getResourceAsStream ()方法。 有两种方法可以获取类加载器。
inputstream in=testread.class.getclass loader ().getresourceasstream (XML文件名称);
或者
inputstream in=new test read (.getclass ).getClassLoader ).getresourceasstream (XML filename );
4、将一个流转换为字符串的实现如下。
//*
*读取输入流是内存字符串,保存文件的换行格式
*
* @param in输入流
* @param charset文件字符集代码
* @return文件内容字符串
*/
公共静态字符串文件2字符串{
StringBuffer sb=new StringBuffer (;
try {
linenumberreaderreader=newlinenumberreader (newbufferedreader ) newinputstreamreader(in,charset ) )
字符串线;
while((line=reader.readline ) )!=空) {
sb.append(line ).append ) system.getproperty (' line.separator ' );
}
reader.close (;
} catch (unsupportedencodingexceptione ) {
文件读取失败,因为使用了log.error ('不支持的字符编码' charset,e )。
}catch(ioexceptione ) {
log.error ('读取文件在内存字符串中失败。 失败的原因是读取文件异常!' 、e;
}
return sb.toString (;
}