我想从我的jar中读取资源,如下所示:
File file;
file = new File(getClass().getResource("/file.txt").toURI());
BufferredReader reader = new BufferedReader(new FileReader(file));
//Read the file
Run Code Online (Sandbox Code Playgroud)
并且它在Eclipse中运行时工作正常,但是如果我将它导出到jar中运行它就会出现IllegalArgumentException:
Exception in thread "Thread-2"
java.lang.IllegalArgumentException: URI is not hierarchical
Run Code Online (Sandbox Code Playgroud)
而且我真的不知道为什么,但经过一些测试我发现如果我改变了
file = new File(getClass().getResource("/file.txt").toURI());
Run Code Online (Sandbox Code Playgroud)
至
file = new File(getClass().getResource("/folder/file.txt").toURI());
Run Code Online (Sandbox Code Playgroud)
然后它的工作正好相反(它适用于jar而不是eclipse).
我正在使用Eclipse,我的文件夹在一个类文件夹中.
在Java中是否有办法通过类加载器在jar中检索的资源上构造File实例?
我的应用程序使用jar中的一些文件(默认)或运行时指定的文件系统目录(用户输入).我正在寻找一种一致的方法:
a)将这些文件作为流加载
b)分别列出用户定义目录中的文件或jar中的目录
编辑:显然,理想的方法是完全远离java.io.File.有没有办法从类路径加载目录并列出其内容(包含在其中的文件/实体)?
我正在尝试从作为桌面应用程序运行的单独jar中访问jar文件中的XML文件.我可以获取我需要的文件的URL,但是当我将它传递给FileReader(作为String)时,我得到一个FileNotFoundException,说"文件名,目录名或卷标语法不正确."
作为参考,我可以毫不费力地从同一个jar中读取图像资源,并将URL传递给ImageIcon构造函数.这似乎表明我用来获取URL的方法是正确的.
URL url = getClass().getResource("/xxx/xxx/xxx/services.xml");
ServicesLoader jsl = new ServicesLoader( url.toString() );
Run Code Online (Sandbox Code Playgroud)
在我的ServicesLoader类中
XMLReader xr = XMLReaderFactory.createXMLReader();
xr.setContentHandler( this );
xr.setErrorHandler( this );
xr.parse( new InputSource( new FileReader( filename )));
Run Code Online (Sandbox Code Playgroud)
使用这种技术读取XML文件有什么问题?
可能重复:
如何从Java jar文件中读取资源文件?
谷歌搜索几个小时后开始完全疯狂.我也看到了网站上的问题的变化,但似乎无法让它工作.JFrame需要从ini文件中读取数据,并且我已经创建了一个打开所述文件的方法.所述文件存储在jar文件中名为resources的文件夹中.
private BufferedReader openIniFile(String filename){
BufferedReader brReader = null;
try{
File fileObj = new File(this.getClass().getResource("/resources/" + filename).toURI()); // The fileobject of the file to read
if(fileObj.exists())
brReader = new BufferedReader(new FileReader(fileObj));
} catch(Exception e){
System.err.println("Exception while opening file: " + e.getMessage());
}
return null;
}
Run Code Online (Sandbox Code Playgroud)
当我在编译后运行代码时,这当然很有效,但在导出到.jar文件后抛出异常.我已经研究过使用InputStream,FileInputStream但似乎无法找到可行的解决方案.
如何让jar文件识别资源?
我正在使用FlatPack来解析和加载平面文件中的数据.这需要加载存储平面文件列的映射的配置文件.
我有一个常量来定义映射文件的位置:
private static final String MAPPING_FILE = "src/com/company/config/Maping.pzmap.xml";
Run Code Online (Sandbox Code Playgroud)
我有一个实际解析的解析(File dataFile)方法:
private void parse(File dataFile) throws FileNotFoundException, SQLException {
Parser parser;
log.info("Parsing " + dataFile.getName());
FileReader mappingFileReader = new FileReader(MAPPING_FILE);
FileReader dataFileReader = new FileReader(dataFile);
parser = DefaultParserFactory.getInstance().newFixedLengthParser(mappingFileReader, dataFileReader);
parser.setHandlingShortLines(true);
DataSet dataSet = parser.parse();
//process the data
}
Run Code Online (Sandbox Code Playgroud)
当我罐子了一切并运行它作为一个罐子-出来就可以弹FileReader mappingFileReader = new FileReader(MAPPING_FILE);了FileNotFoundException.那个文件虽然在jar里面.
我怎么做到的?
我试图做的是在程序的JAR中存储一个文本文件(不会改变),以便可以读取它.文本文件的目的是它将被我的一个类读入,文本文件的内容将被添加到JEditorPane.该文件基本上是一个教程,当用户点击选项阅读教程时,文件内容将被读取并显示在弹出的新窗口中.
我有它的GUI部分,但只要将文件存储在JAR中以便可以访问它,我就迷路了.我已经读过使用一个InputStream遗嘱,但在尝试了一些事情之后我还没有让它工作.
我还将图像存储在JAR中,以用作GUI窗口的图标.这完成了:
private Image icon = new ImageIcon(getClass()
.getResource("resources/cricket.jpg")).getImage();
Run Code Online (Sandbox Code Playgroud)
但是,这在尝试获取文件时不起作用:
private File file = new File(getClass.getResource("resources/howto.txt"));
Run Code Online (Sandbox Code Playgroud)
这是我现在的班级:
public class HowToScreen extends JFrame{
/**
*
*/
private static final long serialVersionUID = -3760362453964229085L;
private JEditorPane howtoScreen = new JEditorPane("text/html", "");
private Image icon = new ImageIcon(getClass().getResource("resources/cricket.jpg")).getImage();
private BufferedReader txtReader = new BufferedReader(new InputStreamReader(getClass().getResourceAsStream("/resources/howto.txt")));
public HowToScreen(){
setSize(400,300);
setLocation(500,200);
setTitle("Daily Text Tutorial");
setIconImage(icon);
howtoScreen.setEditable(false);
howtoScreen.setText(importFileStream());
add(howtoScreen);
setVisible(true);
}
public String importFile(){
String text = "";
File file = …Run Code Online (Sandbox Code Playgroud) 我需要/test/a.xml从test.jar文件中读取内容(它们都是变量,当然,不是常量).最简单的方法是什么?
File file = new File("test.jar");
String path = "/test/a.xml";
String content = // ... how?
Run Code Online (Sandbox Code Playgroud) 我的标签有问题:
JTabbedPane tab = new JTabbedPane();
frame.add(tab, BorderLayout.CENTER);
JPanel contact = new JPanel();
contact.add(backgroundContact);
tab.add("Contacto", contact);
//tab.addTab("Contacto",new ImageIcon("images/image2.gif"), contact,"");
JPanel schedule = new JPanel();
schedule.add(backgroundSchedule);
tab.add("Horario", schedule);
//tab.addTab("Horario", new ImageIcon("images/image2.gif"), schedule,"");
JPanel cost = new JPanel();
cost.add(backgroundCost);
tab.add("Tarifas", cost);
//tab.addTab("Tarifas", new ImageIcon("images/image3.gif"), cost,"");
// Los iconos
tab.setIconAt(0, new ImageIcon("images/image1.gif"));
tab.setIconAt(1, new ImageIcon("images/image2.gif"));
tab.setIconAt(2, new ImageIcon("images/image3.gif"));
Run Code Online (Sandbox Code Playgroud)
我已经尝试了两个选项,但图标没有显示.为什么会这样?
我也试过:new ImageIcon("images/im.gif")哪个不存在,我没有任何错误