Ссылки на файлы (Java) в программе обновления - PullRequest
0 голосов
/ 23 октября 2011

Пишу апдейтер.У меня есть этот код:

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 ]

2 голосов
/ 23 октября 2011

Получить путь к текущему каталогу (каталогу, в котором находится файл .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")
0 голосов
/ 23 октября 2011

Вы, вероятно, запускаете программу из другого каталога, на один уровень выше?

Вы можете использовать getAbsolutePath () в этих java.io.File-s, чтобы узнать, какой путь к файлу вы действительно пытаетесь найтичитать из.

Или просто использовать решение Марек Себера , все в порядке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...