如何将字符串变量插入文件路径?

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());
}