如何将字符串变量插入文件路径?
How do I insert a String variable into a file path?
我希望能够使用可以在文件路径中更改的变量。与文件路径相关的用户名在构造函数中声明,然后我试图在下面的方法中将其分配给文件路径。
调用时我希望发生的事情:
System.out.format("%s%n", documentsPath.resolve(username +"\Documents"));
文件路径是:
C:\Users\ryanb\Documents
相反,当我调用 documentsPath.toString()
时,我只会返回:
C:\Users\
如何让 documentsPath
变量分配给字符串用户名和末尾的 "\Documents"
。
这是我的代码:
class profileCopy{
/*global variables */
private Path documentsPath;
private Path desktopPath;
private Path favoritesPath;
private Path networkFolder;
private String username;
private String foldername;
public profileCopy(String username, String foldername)
{
this.username = username;
this.foldername = foldername;
documentsPath = Paths.get("C:\Users");
desktopPath = Paths.get("C:\Users");
favoritesPath = Paths.get("C:\Users");
networkFolder = (Paths.get("F:\Data\WP51"));
}
public void copyDocumentsFolder() throws IOException
{
Path newDir = Paths.get("C:\Users\ryanb\Documents\TestCopy");
System.out.format("%s%n", documentsPath.resolve(username +"\Documents"));
System.out.format("%s%n", networkFolder.resolve(foldername + "\Backup"));
System.out.println(networkFolder.getFileName());
Files.move(documentsPath, networkFolder.resolve(documentsPath.getFileName()));
System.out.println(newDir.toString());
}
为了使您的代码不起作用,要点是您没有将 resolve() 方法的 return 值重新分配给您的路径变量,因为方法 return是一个新对象。
为了构建你的路径,你可以使用这样的东西:
documentsPath = Paths.get(string.format("C:\Users\%s\%s", username, "Documents");
如果你想重用一些代码,你可以使用文件夹数组并创建它们:
List<Path> paths = new ArrayList();
String[] defaultFolders = {"Documents", "Desktop", "Music"};
foreach (folder : defaultFolders) {
paths.add(Path.get(string.format("C:\Users\%s\%s", username, folder)));
PS:由于您是在 java 中开发的,因此您应该考虑使 Path 的 UNIX 或 Windows 兼容,因为 UNIX 环境不兼容无法识别 "C:/Users" 路径。
解析方法returns路径
public void copyDocumentsFolder() throws IOException
{
Path newDir = Paths.get("C:\Users\ryanb\Documents\TestCopy");
documentsPath = documentsPath.resolve(username + "\Documents");
networkFolder = networkFolder.resolve(foldername + "\Backup");
System.out.format("%s%n", documentsPath);
System.out.format("%s%n", networkFolder);
System.out.println(networkFolder.getFileName());
Files.move(documentsPath, networkFolder.resolve(documentsPath.getFileName()));
System.out.println(newDir.toString());
}
我希望能够使用可以在文件路径中更改的变量。与文件路径相关的用户名在构造函数中声明,然后我试图在下面的方法中将其分配给文件路径。
调用时我希望发生的事情:
System.out.format("%s%n", documentsPath.resolve(username +"\Documents"));
文件路径是:
C:\Users\ryanb\Documents
相反,当我调用 documentsPath.toString()
时,我只会返回:
C:\Users\
如何让 documentsPath
变量分配给字符串用户名和末尾的 "\Documents"
。
这是我的代码:
class profileCopy{
/*global variables */
private Path documentsPath;
private Path desktopPath;
private Path favoritesPath;
private Path networkFolder;
private String username;
private String foldername;
public profileCopy(String username, String foldername)
{
this.username = username;
this.foldername = foldername;
documentsPath = Paths.get("C:\Users");
desktopPath = Paths.get("C:\Users");
favoritesPath = Paths.get("C:\Users");
networkFolder = (Paths.get("F:\Data\WP51"));
}
public void copyDocumentsFolder() throws IOException
{
Path newDir = Paths.get("C:\Users\ryanb\Documents\TestCopy");
System.out.format("%s%n", documentsPath.resolve(username +"\Documents"));
System.out.format("%s%n", networkFolder.resolve(foldername + "\Backup"));
System.out.println(networkFolder.getFileName());
Files.move(documentsPath, networkFolder.resolve(documentsPath.getFileName()));
System.out.println(newDir.toString());
}
为了使您的代码不起作用,要点是您没有将 resolve() 方法的 return 值重新分配给您的路径变量,因为方法 return是一个新对象。
为了构建你的路径,你可以使用这样的东西:
documentsPath = Paths.get(string.format("C:\Users\%s\%s", username, "Documents");
如果你想重用一些代码,你可以使用文件夹数组并创建它们:
List<Path> paths = new ArrayList();
String[] defaultFolders = {"Documents", "Desktop", "Music"};
foreach (folder : defaultFolders) {
paths.add(Path.get(string.format("C:\Users\%s\%s", username, folder)));
PS:由于您是在 java 中开发的,因此您应该考虑使 Path 的 UNIX 或 Windows 兼容,因为 UNIX 环境不兼容无法识别 "C:/Users" 路径。
解析方法returns路径
public void copyDocumentsFolder() throws IOException
{
Path newDir = Paths.get("C:\Users\ryanb\Documents\TestCopy");
documentsPath = documentsPath.resolve(username + "\Documents");
networkFolder = networkFolder.resolve(foldername + "\Backup");
System.out.format("%s%n", documentsPath);
System.out.format("%s%n", networkFolder);
System.out.println(networkFolder.getFileName());
Files.move(documentsPath, networkFolder.resolve(documentsPath.getFileName()));
System.out.println(newDir.toString());
}