Ivo*_*ius 7 java directory url applet jar
我试图访问我的jar文件中的目录.我想浏览目录中的每个文件.我试过,例如,使用以下内容:
URL imagesDirectoryURL=getClass().getClassLoader().getResource("Images");
if(imagesFolderURL!=null)
{
File imagesDirectory= new File(imagesDirectoryURL.getFile());
}
Run Code Online (Sandbox Code Playgroud)
如果我测试这个小程序,它运行良好.但是,一旦我把内容放入罐子里,它就不会因为几个原因了.如果我使用此代码,则URL始终指向jar外部,因此我必须将Images目录放在那里.但是,如果我使用new File(imagesDirectoryURL.toURI());它,它在jar内部不起作用,因为我得到了错误URI not hierarchical.我确定该目录存在于jar中.我怎么能得到Imagesjar里面的内容?
如果您使用 Java 7,这里是一个应该可以工作的解决方案...“技巧”是使用新的文件 API。Oracle JDK 提供了一个FileSystem实现,可用于查看/修改 ZIP 文件,其中包括 jar!
初步:抢System.getProperty("java.class.path", ".")、劈兑:;这将为您提供定义的类路径中的所有条目。
首先,定义一个方法来获取FileSystem类路径条目:
private static final Map<String, ?> ENV = Collections.emptyMap();
//
private static FileSystem getFileSystem(final String entryName)
throws IOException
{
final String uri = entryName.endsWith(".jar") || entryName.endsWith(".zip"))
? "jar:file:" + entryName : "file:" + entryName;
return FileSystems.newFileSystem(URI.create(uri), ENV);
}
Run Code Online (Sandbox Code Playgroud)
然后创建一个方法来判断文件系统中是否存在路径:
private static boolean pathExists(final FileSystem fs, final String needle)
{
final Path path = fs.getPath(needle);
return Files.exists(path);
}
Run Code Online (Sandbox Code Playgroud)
用它来定位您的目录。
一旦你获得了正确的信息FileSystem,就可以使用它来遍历你的目录.getPath(),并使用上面的方法打开一个DirectoryStreamusing Files.newDirectoryStream().
完成后.close()不要忘记!FileSystem
下面是一个示例main(),演示如何读取 jar 的所有根条目:
public static void main(final String... args)
throws IOException
{
final Map<String, ?> env = Collections.emptyMap();
final String jarName = "/opt/sunjdk/1.6/current/jre/lib/plugin.jar";
final URI uri = URI.create("jar:file:" + jarName);
final FileSystem fs = FileSystems.newFileSystem(uri, env);
final Path dir = fs.getPath("/");
for (Path entry : Files.newDirectoryStream(dir))
System.out.println(entry);
}
Run Code Online (Sandbox Code Playgroud)
Jars中的路径是路径,而不是实际目录,因为您可以在文件系统上使用它们.要获取Jar文件的特定路径中的所有资源:
URL指向罐子.InputStream从中得到一个URL.ZipInputStream从中构建一个InputStream.ZipEntry,寻找与所需路径的匹配.
..当它不在那个罐子里面时,我还能测试我的Applet吗?或者我是否需要编程两种方式来获取我的图像?
对于ZipInputStream文件系统上的目录中的松散资源不起作用.但是,我强烈建议使用像Ant这样的构建工具来构建(编译/ jar/sign等)applet.编写构建脚本并检查它可能需要一个小时左右,但此后您可以通过几次击键和几秒钟来构建项目.
如果我想要测试我的Aplet,我总是必须提取并签署我的jar,这将是非常烦人的
我不确定你的意思."提取物"在哪里进入?如果我不清楚,沙盒小程序可以从archive属性中提到的任何Jar加载资源.您可能要做的另一件事是将资源Jar(s)与小程序Jar分开.资源通常变化少于代码,因此您的构建可能会采取一些快捷方式.
我想我真的要考虑把我的图像放到jar外的一个单独的目录中.
如果您的意思是在服务器上,没有实用的方法来获取服务器提供的帮助之外的图像文件列表.EG某些服务器不安全地设置为为没有默认文件的任何目录(例如index.html)生成基于HTML的"文件列表".
我只有一个罐子,里面有我的课程,图像和声音.
好的 - 考虑将声音和图像移动到一个单独的Jar中.或者至少,将它们放入Jar中并且"无压缩".虽然Zip压缩技术适用于类,但它们在压缩(否则已经压缩)的媒体格式方面效率较低.
我必须签名,因为我使用"首选项"类来保存用户设置."
Preferencesapplet 有替代品,例如cookies.对于插件2架构applet,您可以使用Java Web Start启动 applet(仍然嵌入在浏览器中).JWS提供PersistenceService.这是我的小演示.PersistenceService.
说到JWS,这让我想到:你是否绝对肯定这款游戏会更好用作applet,而不是JFrame使用JWS推出的app(例如使用a )?
Applet将给你带来无尽的压力,JWS PersistenceService自从它在Java 1.2中引入以来就提供了它.
| 归档时间: |
|
| 查看次数: |
8042 次 |
| 最近记录: |