我正在尝试使用Class.getResource()方法将数据保存到计算机上的文件中。问题是它返回一个URL。我找不到使用url写入文件的方法。这是我到目前为止的代码:
url = getClass().getResource("save.txt");
URLConnection urlconn = url.openConnection();
OutputStream os = urlconn.getOutputStream();
OutputStreamWriter isr = new OutputStreamWriter(os);
buffer = new BufferedWriter(isr);
当我跑步时,我得到一个 java.net.UnknownServiceException:协议不支持输出 错误。我不知道该怎么做。
答案 0 :(得分:3)
你不能写这样的资源。这意味着只读。
另一方面,您可以找到资源文件的路径。 其中一种方法可能是:
找出资源的路径
public static File findClassOriginFile( Class cls ){
// Try to find the class file.
try {
final URL url = cls.getClassLoader().getResource( cls.getName().replace('.', '/') + ".class");
final File file = new File( url.getFile() ); // toString()
if( file.exists() )
return file;
}
catch( Exception ex ) { }
// Method 2
try {
URL url = cls.getProtectionDomain().getCodeSource().getLocation();
final File file = new File( url.getFile() ); // toString()
if( file.exists() )
return file;
}
catch( Exception ex ) { }
return null;
}
上述方法查找Class
的文件,但也可以轻松更改为资源。
我建议将资源用作默认资源,将其从类路径复制到某个工作目录并保存在那里。
将资源复制到目录
public static void copyResourceToDir( Class cls, String name, File dir ) throws IOException {
String packageDir = cls.getPackage().getName().replace( '.', '/' );
String path = "/" + packageDir + "/" + name;
InputStream is = GroovyClassLoader.class.getResourceAsStream( path );
if( is == null ) {
throw new IllegalArgumentException( "Resource not found: " + packageDir );
}
FileUtils.copyInputStreamToFile( is, new File( dir, name ) );
}