你不能写这样的资源。它是只读的。
另一方面,您可以找到资源文件的路径。其中一种方法可能是:
找出资源的路径
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;
}
上面的方法为 a 找到一个文件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 ) );
}