Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Windows中使用Java访问路径中包含非法字符的文件_Java_Windows_Path - Fatal编程技术网

在Windows中使用Java访问路径中包含非法字符的文件

在Windows中使用Java访问路径中包含非法字符的文件,java,windows,path,Java,Windows,Path,我使用的是Windows机器和Java。我只是想备份一个文件,但我遇到了一个问题,路径(“#”)中有一个非法字符。我真的试过了,我被卡住了。我试着用我能找到或想到的所有变体重写了它。任何帮助都将不胜感激 public class SyncActionMachine { /** * @param args the command line arguments */ public static void main(String[] args) throws IOException, URISy

我使用的是Windows机器和Java。我只是想备份一个文件,但我遇到了一个问题,路径(“#”)中有一个非法字符。我真的试过了,我被卡住了。我试着用我能找到或想到的所有变体重写了它。任何帮助都将不胜感激

public class SyncActionMachine {

/**
 * @param args the command line arguments
 */
public static void main(String[] args) throws IOException, URISyntaxException {
    String MSI_one, MSI_two, dropBox;
    GetDate getDate = new GetDate();

    MSI_one = "C:\\Users\\Brian\\AppData\\Roaming\\Macromedia\\Flash Player\\#SharedObjects\\Q2965ZS7\\localhost\\ActionMachine.sol";
    MSI_two = "C:\\Users\\Brian\\Desktop\\test.txt";
    dropBox = "C:\\Users\\Brian\\Dropbox\\Action Machine History\\ActionMachine.sol";

    File source = new File(MSI_one);
    File destination = new File(dropBox);

    // Attempt #1 using string with special characters  
    try {
        Files.copy(source.toPath(), destination.toPath());
    } catch (IOException iOException) {
        System.out.println("Didn't work: " + iOException);
    }

    // Attempt #2 using URI - not really sure how to use it.
    URI uri;
    uri = new URI("file:///C:/Users/Brian/AppDate/Roaming/Macromedia/Flash%20Player/%23SharedObjects/Q2965ZS7/localhost/ActionMachine.sol");
    Path uriSelfMadePath = Paths.get(uri);
    try {
        Files.copy(uriSelfMadePath, destination.toPath());
    } catch (IOException iOException) {
        System.out.println("Didn't work: " + iOException);
    }

    // Attempt #3 Suggestion from Aurasphere. Thanks again for quick response.
    // Not sure what I'm suppose to do with the URL
    String thePath = MSI_one;
    thePath = URLEncoder.encode(thePath, "UTF-8");
    Path aurasphereThePath = Paths.get(thePath);
    try {
        Files.copy(aurasphereThePath, destination.toPath());
    } catch (IOException iOException) {
        System.out.println("Didn't work: " + iOException);
    }

    // Attempt #4 build path using Patha and passing in augruments separately
    Path pathOneByOne = Paths.get("C:", "Users", "Brian", "AppDate", "Roaming", "Macromedia", "Flash Player",
            "#SharedObjects", "Q2965ZS7", "localhost", "ActionMachine.sol");
    try {
        Files.copy(pathOneByOne, destination.toPath());
    } catch (IOException iOException) {
        System.out.println("Didn't work: " + iOException);
    }

    // Seeing what all these path's look like
    URL fileUrl = source.toURI().toURL();
    URI fileUri = source.toURI();
    System.out.println("------------Path Print out------------------");
    System.out.println("URLEncoder : " + thePath);
    Path from = Paths.get(fileUri);
    System.out.println("URL : " + fileUrl);
    System.out.println("URI : " + fileUri);
    System.out.println("source: " + source);

}

}
谢谢您的建议。

只需使用URLEncode:

String thePath = "your_path";
thePath = URLEncoder.encode(thePath, "UTF-8"); 

谢谢大家的关注和评论。一定是在睡觉的时候。不管怎么说,这是来源,它工作得很好。结果是,这是一件大事,我甚至不确定我的挂断是什么

public static void main(String[] args) throws IOException, URISyntaxException {
    String MSI_one, MSI_two, dropBox;
    GetDate getDate = new GetDate();

    MSI_one = "C:\\Users\\Brian\\AppData\\Roaming\\Macromedia\\Flash Player\\#SharedObjects\\Q2965ZS7\\localhost\\ActionMachine.sol";
    MSI_two = "C:\\Users\\brian\\AppData\\Roaming\\Macromedia\\Flash Player\\#SharedObjects\\HSTARDTM\\localhost\\ActionMachine.sol";
    dropBox = "C:\\Users\\brian\\Dropbox\\Action Machine History\\";

    // Create new file name for backup file 
    dropBox = dropBox + "ActionMachine-" + getDate.today() + ".sol";

    File source = new File(MSI_two);
    File destination = new File(dropBox);
    copyNewFile cf = new copyNewFile(source, destination);
}


public class copyNewFile {
  public copyNewFile(File source, File dest) throws IOException {
    CopyOption[] options = new CopyOption[]{
        StandardCopyOption.REPLACE_EXISTING,
        StandardCopyOption.COPY_ATTRIBUTES
    };
    Files.copy(source.toPath(), dest.toPath(), options);

    System.out.println("File sucessfully copied.");
  }
}

谢谢你的快速回复。我接受了你的建议并搜索了一会儿,我只是不知道如何实现它。至少乍一看,这似乎不太可能有帮助,因为Windows不使用UTF-8。#在Windows上不是非法字符。你会犯什么错误?什么时候?你是对的,哈利,我用词不对。我想我应该用特殊的角色。在所有测试用例中都找不到错误文件。