【问题标题】:Write To File Method In JARJAR 中的写入文件方法
【发布时间】:2013-01-02 10:45:07
【问题描述】:

我正在使用此方法从 JAR 中的文本文件中读取并正常工作。

BufferedReader Bbr=new BufferedReader(new InputStreamReader(getClass().getResourceAsStream("AllBookRecords.txt")));

现在,我想写入一个文件(从文件中删除一行,通过从第一个文件写入第二个文件而没有特定的行)。

我使用此代码来执行此操作:

String Bookid=tf1.getText();
File Tf=new File("Boutput.txt");
URL myUrl=getClass().getResource("AllBookRecords.txt");
            File file=new File(myUrl.toURI());
            OutputStream myoutput=new FileOutputStream(file);
            PrintWriter pw2=new PrintWriter(myoutput);

            String Bs;
            while( (Bs=Bbr.readLine()) != null ){
                    String[] Ust=Bs.split("     ");
                    String Bname=Ust[0];
                    String Bdate=Ust[1];
                    String id=Ust[2];

                if(!id.equals(Bookid.trim())){
                    pw2.println(Bs);
                }
            }
            pw2.close();
            Bbr.close();
            file.delete();
            Tf.renameTo(file);

        } catch(FileNotFoundException fnfe){
            foundlable.setText("File Not Found");
        } catch(IOException ioe){
            foundlable.setText("IO Error");
            ioe.printStackTrace();
        }
        catch(URISyntaxException ue){
      ue.printStackTrace();
        }

但是 java.lang.IllegalArgumentException 发生了:

C:\Windows\System32>java -jar "C:\Users\khoy\Documents\NetBeansProjects\JavaApplication6\dist\JavaApplication6.jar"
Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: URI is not hierarchical
        at java.io.File.<init>(File.java:363)
        at Library.ReadBookFileToListM$3.actionPerformed(ReadBookFileToListM.java:67)
        at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
        at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
        at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
        at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
        at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
        at java.awt.Component.processMouseEvent(Component.java:6038)
        at javax.swing.JComponent.processMouseEvent(JComponent.java:3265)
        at java.awt.Component.processEvent(Component.java:5803)
        at java.awt.Container.processEvent(Container.java:2058)
        at java.awt.Component.dispatchEventImpl(Component.java:4410)
        at java.awt.Container.dispatchEventImpl(Container.java:2116)
        at java.awt.Component.dispatchEvent(Component.java:4240)
        at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4322)
        at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3986)
        at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3916)
        at java.awt.Container.dispatchEventImpl(Container.java:2102)
        at java.awt.Window.dispatchEventImpl(Window.java:2429)
        at java.awt.Component.dispatchEvent(Component.java:4240)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273)
        at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)

我的文件在类路径中。

谢谢。

【问题讨论】:

  • 简短回答,你不能。更长的答案,使用搜索功能并阅读同一主题的many existing questions 之一。
  • 能不能给我推荐个特别的方法?
  • 编辑您的问题以描述您尝试做的事情,而不是您认为自己想要做的事情。重写应用程序的 JAR 有很多替代方法。
  • 我完全糊涂了 有人说不可能,但建议了一些解决方案!什么是正确的?最后,JAR文件怎么写?

标签: java file jar bufferedwriter


【解决方案1】:

你不能这样做。

jar 是文件本身,而不是目录。它包含 java 知道如何读取的资源。但是,jar 中的资源不是文件,因此不能用作文件。据我所知,将新数据写入 jar 的唯一方法是获取内容、进行更改并创建一个全新的 jar。

【讨论】:

  • 关于什么?如果您对 jar 是什么不是很熟悉,可以查看Oracle's docs,当然还有Wikipedia
  • 我完全糊涂了 有人说不可能,但建议了一些解决方案!什么是正确的?最后,JAR文件怎么写?
  • 您不能只写入现有 jar 中的文件。它是一个存档,非常类似于 zip 文件。关于如何解压、写入或以其他方式处理 jar,您可以查看 java.util.jar
猜你喜欢
  • 1970-01-01
  • 2011-03-04
  • 2020-05-27
  • 2016-08-30
  • 2012-12-08
  • 2020-05-21
  • 2015-05-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多