Файл не найден в папке проекта

У меня есть функция, которая загружает файл config.properties из основной папки проекта, однако, он дает мне исключение FileNotFoundException, и я понятия не имею, почему. Мой метод выглядит так:

public static Configfile configuration() {
        String server = null;
        int dbport = 0;
        String dbuser = null;
        String dbpass = null;

        Properties prop = new Properties();
        InputStream input = null;

        try {
            input = new FileInputStream("config.properties");
            prop.load(input);

            server = prop.getProperty("server");
            dbport = Integer.parseInt(prop.getProperty("dbport"));
            dbuser = prop.getProperty("dbuser");
            dbpass = prop.getProperty("dbpassword");
        } catch (IOException ex) {
            ex.printStackTrace();
        } finally {
            if (input != null) {
                try {
                    input.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return new Configfile(server, dbport, dbuser, dbpass);
    }

И мой файл config.properties находится в:

E: \ Android \ NSomething5

Что мне не хватает?

РЕДАКТИРОВАТЬ: Stacktrace:

12-04 17:00:07.619: W/System.err(21368): java.io.FileNotFoundException: /config.properties: open failed: ENOENT (No such file or directory)
12-04 17:00:07.619: W/System.err(21368):    at libcore.io.IoBridge.open(IoBridge.java:416)
12-04 17:00:07.619: W/System.err(21368):    at java.io.FileInputStream.<init>(FileInputStream.java:78)
12-04 17:00:07.619: W/System.err(21368):    at java.io.FileInputStream.<init>(FileInputStream.java:105)
12-04 17:00:07.619: W/System.err(21368):    at com.example.nsomething.utils.DBOperations.configuration(DBOperations.java:122)
12-04 17:00:07.619: W/System.err(21368):    at com.example.nsomething.utils.DBOperations.<init>(DBOperations.java:24)
12-04 17:00:07.619: W/System.err(21368):    at com.example.nsomething.Report.<init>(Report.java:20)
12-04 17:00:07.619: W/System.err(21368):    at java.lang.Class.newInstanceImpl(Native Method)
12-04 17:00:07.619: W/System.err(21368):    at java.lang.Class.newInstance(Class.java:1319)
12-04 17:00:07.619: W/System.err(21368):    at android.app.Instrumentation.newActivity(Instrumentation.java:1071)
12-04 17:00:07.619: W/System.err(21368):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2162)
12-04 17:00:07.619: W/System.err(21368):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2295)
12-04 17:00:07.619: W/System.err(21368):    at android.app.ActivityThread.access$700(ActivityThread.java:150)
12-04 17:00:07.619: W/System.err(21368):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1280)
12-04 17:00:07.619: W/System.err(21368):    at android.os.Handler.dispatchMessage(Handler.java:99)
12-04 17:00:07.619: W/System.err(21368):    at android.os.Looper.loop(Looper.java:137)
12-04 17:00:07.619: W/System.err(21368):    at android.app.ActivityThread.main(ActivityThread.java:5279)
12-04 17:00:07.619: W/System.err(21368):    at java.lang.reflect.Method.invokeNative(Native Method)
12-04 17:00:07.619: W/System.err(21368):    at java.lang.reflect.Method.invoke(Method.java:511)
12-04 17:00:07.619: W/System.err(21368):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1102)
12-04 17:00:07.619: W/System.err(21368):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869)
12-04 17:00:07.619: W/System.err(21368):    at dalvik.system.NativeStart.main(Native Method)
12-04 17:00:07.619: W/System.err(21368): Caused by: libcore.io.ErrnoException: open failed: ENOENT (No such file or directory)
12-04 17:00:07.619: W/System.err(21368):    at libcore.io.Posix.open(Native Method)
12-04 17:00:07.619: W/System.err(21368):    at libcore.io.BlockGuardOs.open(BlockGuardOs.java:110)
12-04 17:00:07.619: W/System.err(21368):    at libcore.io.IoBridge.open(IoBridge.java:400)
12-04 17:00:07.619: W/System.err(21368):    ... 20 more

2 ответа

Решение

FileInputStream загружает файл либо из предоставленного абсолютного пути, либо относительно "текущего рабочего каталога". Теперь абсолютный путь не имеет отношения к вашему примеру. Поэтому FileInputStream ищет ваш файл config.properties в "текущем рабочем каталоге". Обычно это каталог, из которого вы запустили программу. Если вы делаете это на Android, поместите ваш файл конфигурации в папку активов и используйте функции API ресурсов для загрузки файла в виде потока. Если это отдельная Java-программа, поместите файл в classpath и используйте classloader.getResourceAsStream для загрузки файла. Наконец, если вы знаете абсолютный путь к файлу, используйте его напрямую.

E:\Android\NSomething5

Это неверный путь к файловой системе Android. Это путь Windows. Приложение на вашем устройстве не имеет ничего общего с файлами на вашем компьютере.

Поместите ваш файл конфигурации в папку ресурсов вашего проекта. Затем во время выполнения используйте assetsmanager, чтобы открыть InputStream и прочитать из него. В остальном вы можете использовать тот же код. Только открытие InputStream отличается.

Другие вопросы по тегам