在更新程序中引用文件(Java)

时间:2011-10-23 18:03:40

标签: java file-io

我正在写一个更新程序。我有这段代码:

package main;
import java.io.*;
import java.net.*;
import java.util.*;
import java.util.regex.Pattern;
import java.lang.*;

import static java.lang.System.out;
public class UpdaterCore
{
public static void main(String args[]) throws IOException
{
    java.io.BufferedInputStream inv = new java.io.BufferedInputStream(new

                    java.net.URL("http://unicombox.tk/update/nv").openStream());
                    java.io.FileOutputStream fosv = new java.io.FileOutputStream("nv");
                    java.io.BufferedOutputStream boutv = new BufferedOutputStream(fosv,1024);
                    byte data[] = new byte[1024];
                    while(inv.read(data,0,1024)>=0)
                    {
                    boutv.write(data);
                    }
                    boutv.close();
                    inv.close();
                    //end version download

                    Scanner VersionReader= new Scanner(new File ("v")).useDelimiter(",");
                    int currentVersion= VersionReader.nextInt();
                    VersionReader.close();

                    Scanner NewVersionReader= new Scanner(new File ("nv")).useDelimiter(",");
                    int newVersion= NewVersionReader.nextInt();
                    NewVersionReader.close();



                    if (newVersion>currentVersion){


                    java.io.BufferedInputStream in = new java.io.BufferedInputStream(new

                                    java.net.URL("http://unicombox.tk/update/update.zip").openStream());
                    java.io.FileOutputStream fos = new java.io.FileOutputStream("update.zip");
                    java.io.BufferedOutputStream bout = new BufferedOutputStream(fos,1024);
                    byte data1[] = new byte[1024];
                    while(in.read(data1,0,1024)>=0)
                    {
                            bout.write(data1);
                    }
                    bout.close();
                    in.close();
                    out.println("Update successfully downloaded!");

                    }

                    else{
                            out.println("You have the latest version!");
                    }








}
}

它从服务器获取新版本,然后将其与当前版本进行比较。如果新版本大于当前版本,则会下载更新。

我遇到了一个大问题。我的程序永远找不到文件“v”和“nv”! “v”和“nv”与编译的jar在同一个文件夹中,但我得到了一个FileNotFound。 我做错了什么?

2 个答案:

答案 0 :(得分:2)

获取当前目录(放置.jar文件的目录)的路径,如下所示:

// import java.io.*;
// import java.net.URLDecoder;
// throws java.io.UnsupportedEncodingException 

    String path = UpdaterCore.class.getProtectionDomain().getCodeSource().getLocation().getPath();
    String decodedPath = URLDecoder.decode(path, "UTF-8");
    System.out.println(decodedPath);

然后像这样创建File实例

new File (decodedPath + File.separatorChar + "v")

答案 1 :(得分:0)

您可能正在从另一个目录运行该程序,一个级别?

您可以在java.io.File-s上使用getAbsolutePath()来找出您真正想要读取的文件路径。

或者只使用 Marek Sebera 的解决方案,没关系。