При открытии файла относительный путь к файлу не найден - PullRequest
0 голосов
/ 28 августа 2018

Iam Добавление файла в мой проект Eclipse

И мне нужно открыть его, когда моя программа запускается для чтения из нее Основная проблема Когда я пытаюсь распечатать путь к файлу
Он печатает, что файл находится в папке bin, но не может открыть его, он дает мне Файл не найден (система не может найти указанный путь)

Вот мой код

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.net.URL;

public class po {

public static void main(String[] args)   throws FileNotFoundException  {





    URL path=po.class.getClassLoader().getResource("abcd.txt");

    String path_s=path.toString();
    System.out.println(path.getPath().toString());
    String p=path.getPath().toString();
    System.out.println(p);
    String pp="ar\rrrr";
    p=p.replaceAll(pp.substring(2,3),"/");
    System.out.println(p);

    File file = new File(p);

      BufferedReader br = new BufferedReader(new FileReader(file));

      String st;
      try {
        while ((st = br.readLine()) != null)
            System.out.println(st);
    } catch (IOException e) {

        e.printStackTrace();
    }






}

}

Для людей, которые отметят как Дубликат Я ссылался на это решение, но не работал
Решение StackOverflow

Если файл похож на это

enter link description here

это дает мне исключение нулевого указателя В строке, когда я пытаюсь преобразовать путь в строку

URL path=po.class.getClassLoader().getResource("abcd.txt");

    String a=path.toString();

Ответы [ 2 ]

0 голосов
/ 28 августа 2018

Если вы используете свой код:
URL path=po.class.getClassLoader().getResource("abcd.txt"); Это означает, что вы используете расположение ресурса класса (после сборки)
В вашем случае, поскольку вы переместили файл в другое место, вы можете изменить значение вашей переменной.

//String path_s=path.toString();
 String path_s="Files/abcd.txt"; //relative path to proj.
0 голосов
/ 28 августа 2018

Это полный рабочий пример:

import java.io.*;
import java.net.*;

public class Test {
    public static void main(String[] args) {
        URL url=Test.class.getClassLoader().getResource("Files_1/abcd.txt");

        try {
            File file = new File(url.toURI());
            try (BufferedReader br = new BufferedReader(new FileReader(file))) {
                String st;
                while ((st = br.readLine()) != null)
                    System.out.println(st);
            } catch (IOException e) {
                e.printStackTrace();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Убедитесь, что Files_1/abcd.txt относится к классу, где вызывается getResource().

В моем примере у меня есть такая структура каталогов:

Desktop
+-- test
    +-- Test.java
    +-- Test.class
    +-- Files_1
        +-- abcd.txt

Это работает с обеими командами:

~/Desktop/test $ java Test

и

~/Desktop $ java -cp test Test
...