如何将 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
我想尝试创建一个 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