在Jar中读写文件

时间:2016-05-30 08:39:34

标签: java xml eclipse jar

我终于完成了一个Java程序,我必须上传它。 问题是我还要上传可执行的.jar文件,而不仅仅是eclipse项目。

我的程序的主要功能包括读取和写入.xml文件(例如,一个文件用于读取和添加新用户),项目文件夹中的文件位于:

- 项目名称

  • SRC
    • 默认包
      • 主要和所有其他类
  • file1.xml
  • file2.xml

因此,两个.xml文件位于项目的根目录中。

我的问题是:最好将.xml文件保存在JAR中,然后从可执行程序中写入和读取它们,或者最好将它们存储在.JAR外部的文件夹中,并将它们作为外部读取和写入文件?

最好创建一个这样的文件夹?:

-ProjectName

  • file1.xml
  • file2.xml
  • project.jar

我在Stackoverflow中看到很多人遇到同样的问题而且很多人都不知道如何妥善管理这个问题。

提前感谢您的回复:)

3 个答案:

答案 0 :(得分:2)

更改JAR文件中的文件可能会出现各种问题。首先是简单的事情,例如当你想要将程序更新到最新版本时会发生什么?通常你只是交换jar,但是你放弃了迄今为止编辑过的所有内容。你需要一个进程来在jar里面进行更新。

其他问题包括更改jar文件需要打开它,可能重新调整内容并重写索引,这可能与正在读取jar的JVM冲突,导致奇怪的行为。在某些系统(Windows ...)上,Jar文件甚至可能在应用程序运行时被锁定,因此您根本无法写入它。

我建议您将“默认文件”(如果您的文件最初不仅仅为空)添加到代表初始状态的Jar文件中。如果启动了应用程序,则检查XML文件是否存在于某个正常的可写目录中,以及它们是否只是将默认文件复制到该目录。这允许您仅部署一个jar文件,但一旦启动,将创建相应的文件。

答案 1 :(得分:1)

您可能会读取位于可执行文件Jar内的XML文件,但无法更新(写入)位于该可执行Jar文件中的XML文件。所以最好的选择是: -

<head runat="server">
    <title></title>
    <script src="https://code.jquery.com/jquery-1.12.2.min.js"></script>
    <script>
        $(function () {
            var shouldMove = true;

            setInterval(function ()
            {
                var previous = $("a:contains('Previous')");

                if (previous.html() != undefined && shouldMove)
                {
                    var grid = $("#CommentGridView");
                    $(previous).insertBefore($(grid));
                    shouldMove = false
                }
            }, 100);

            $(document).on('click', "a:contains('Next')", function () {
                shouldMove = true;
            });

            $(document).on('click', "a:contains('Previous')", function () {
                shouldMove = true;
            });

        });
    </script>
</head>
<body>
    <form id="form1" runat="server">
        <div>
            <asp:GridView ID="CommentGridView"
                AutoGenerateColumns="true"
                EnableSortingAndPagingCallbacks="true"
                EmptyDataText="0 commentaire"
                runat="server"
                ShowHeader="false"
                ShowFooter="true"
                Width="90%"
                AllowPaging="True"
                PageSize="3"
                GridLines="None"
                OnPageIndexChanging="CommentGridView_PageIndexChanging">
                <PagerSettings NextPageText="Next" PreviousPageText="Previous" Mode="NextPrevious" />
            </asp:GridView>
        </div>
    </form>
</body>

答案 2 :(得分:1)

jar应保持只读,XML&#34;文件&#34;应使用getResource[AsStream](类路径)读取jar内部。您可以使用这些 resources 作为模板在用户(或应用程序的)目录/子目录中创建副本。对于用户的目录:

System.getProperty("user.home")