URI에서 파일에 액세스하려고합니다. 불행히도 파일 경로에 특별한 이름이 들어 있습니다.Java : URI의 특수 문자를 처리합니다.
예를 들어이 아래에있는 내 코드 (scriptFile 위가 값) : fileFromUri 기능 내가이 같은 예외가: 파일 : //가 C : /6-6+hf.1-181/db/mssql-ddl.sql 상세
public static File fileFromUri(URI uri) {
try {
if(uri.getScheme() == null) {
uri = (new File(uri.getPath())).toURI();
} else if(!uri.getScheme().equals("file")) {
return null;
}
String fileName = uri.toURL().getFile();
return new File(URLDecoder.decode(fileName, "UTF8"));
} catch (Exception var2) {
return null;
}
}
File tempFile = FileUtility.fileFromUri(new URI(scriptFile));
입니다
어떤 617,451,515,java.io.FileNotFoundException : C : java.io.FileInputStream.open0에서 /6-6+hf.1-181/db/mssql-ddl.sql (지정된 경로를 찾을 수 없습니다) (네이티브 메소드) ~ [? : 1.8.0_65] at java.io.FileInputStream.open (FileInputStream.java:195) ~ [? : 1.8.0_65] at java.io.FileInputStream. (FileInputStream.java:138) ~ [? : 1.8.0_65] at java.io.FileReader. (FileReader.java:72) ~ [? : 1.8.0_65] at com.automic.actions.common.utils.FileUtility.readFileAsString (FileUtility .java : 70) ~ [common-tool-develop-SNAPSHOT.jar :?] at com.automic.actions.database.utils.SQLRunner.readStatementsFromFile (SQLRunner .java : 117) ~ [classes/:?] at com.automic.actions.database.utils.SQLRunner.executeScript (SQLRunner.java:91) [classes/:] at com.automic.actions. database.SQLFeature.run (SQLFeature.java:302) [classes/:?] at com.automic.actions.common.FeatureRunner.run (FeatureRunner.java:24) [common-tool-develop-SNAPSHOT.jar :] com.automic.actions.runner.DatabaseToolFileCmd.main (DatabaseToolFileCmd.java:25)에서 [클래스/:?]
내가 전에 URLDecoder를 사용했기 때문에이 예외는 것을 알고
하고, 디코딩 후, 자바는 '+'문자를 공간 문자. 해결책은 단지 '+'문자를 다른 문자로 대체 한 다음 나중에 대체 할 수 있습니다. 그러나 나는 그 접근법을 사용하고 싶지 않다.
다른 솔루션으로 도울 수 있습니까? 감사합니다.
그래서 처음에는 제대로 인코딩되지 않은 URI가 있습니다. 그런 다음 해독하고 문제가 있습니다. 송신자 (권장)에서 제대로 인코딩해야하거나 디코딩을 조정해야합니다 (권장하지 않음). – eis
어리석은 나는 다만, 나가 기능에 암호문을 풀기 전에 그것을 암호로하는 것을 잊었다는 것을 다만 깨닫는다. 내가 편집하고 제대로 작동합니다. 나 한테 수치! –