如何将 Path 对象用作 String

How to use a Path object as a String

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

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() 的 class,它读取各个 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() 方法来读取文件(FileHandler.getNextQuestion)。

我只是在处理字符串路径差异时遇到了问题

非常感谢。

您可以简单地使用 Path.toString() 其中 returns 完整路径作为 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