如何将Path对象用作String

时间:2016-08-11 05:33:25

标签: java string path project

我正在尝试创建一个Java琐事应用程序,它从给定文件夹中的单独问题文件中读取琐事。我的想法是使用FileHandler类中的run()方法将文件夹中的每个文本文件设置为字典并给它们整数键,以便我可以轻松地随机化它们在游戏中出现的顺序。我找到了一个简单的代码块,它能够遍历文件夹并获取每个文件的路径,但形式为Path类。我需要String类中的路径(或只是名称)。因为我需要稍后将它们转换为文件类(除了字符串构造函数,而不是路径)。以下是遍历文件夹的代码块:

public class FileHandler implements Runnable{
    static Map<Integer, Path> TriviaFiles; //idealy Map<Integer, String>
    private int keyChoices = 0;

    public FileHandler(){
        TriviaFiles = new HashMap<Integer, Path>();
    }

    public void run(){

        try {
            Files.walk(Paths.get("/home/chris/JavaWorkspace/GameSpace/bin/TriviaQuestions")).forEach(filePath -> {
                if (Files.isRegularFile(filePath)) {  
                    TriviaFiles.put(keyChoices, filePath);
                    keyChoices++;
                    System.out.println(filePath);
                }

            });
        } catch (FileNotFoundException e) {
            System.out.println("File not found for FileHandler");

        } catch (IOException e ){
            e.printStackTrace();
        }
    }
    public static synchronized Path getNextValue(){
        return TriviaFiles.get(2);
    }
}

还有另一个名为TextHandler()的类,它读取单个txt文件并将其转换为问题。这是:

public class TextHandler {
    private String A1, A2, A3, A4, question, answer;
    //line = null;

    public void determineQuestion(){
        readFile("Question2.txt" /* in file que*/);
        WindowComp.setQuestion(question);
        WindowComp.setAnswers(A1,A2,A3,A4);

    }


    public void readFile(String toRead){

        try{

            File file = new File("/home/chris/JavaWorkspace/GameSpace/bin/TriviaQuestions",toRead);

            System.out.println(file.getCanonicalPath());

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

            question = br.readLine();
            A1 = br.readLine();
            A2 = br.readLine();
            A3 = br.readLine();
            A4 = br.readLine();
            answer = br.readLine();

            br.close();

        } 
        catch(FileNotFoundException e){
            System.out.println("file not found");

        }
        catch(IOException e){
            System.out.println("error reading file");
        }
    }
}

我没有在TextHandler示例中包含的内容不重要。 我的想法是使用determineQuestion()方法来readFile(FileHandler.getNextQuestion)。

我在解决字符串差异的路径时遇到了麻烦

非常感谢。

1 个答案:

答案 0 :(得分:2)

您可以简单地使用Path.toString()作为String返回完整路径。但请注意,如果path为null,则此方法可能会导致NullPointerException。为避免此异常,您可以改为使用String#valueOf

public class Test {

    public static void main(String[] args) throws NoSuchFieldException, SecurityException {
        Path path = Paths.get("/my/test/folder/", "text.txt");
        String str = path.toString();
        // String str = String.valueOf(path); //This is Null Safe
        System.out.println(str);
    }

}

输出

\my\test\folder\text.txt