我正在尝试创建一个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)。
我在解决字符串差异的路径时遇到了麻烦
非常感谢。
答案 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