1
다른 프로그램을 사용하여 bin 파일을 xml로 변환 한 다음 파일을 읽으려고합니다. 다음 코드로 : 나는 FileNotFoundException이 얻을다른 프로세스에서 파일을 사용하고 있지만 canRead()가 true를 반환합니다.
File file = new File(currentPath + "/ammunition.bin");
File file2 = fileTools.convert(file);
ArrayList<String> asd = fileTools.readFile(file2);
는 "파일은 다른 프로세스에서 사용하고 있습니다." 이게 이상한 이유는 file.canRead()는 예외가 발생하더라도 true를 반환한다는 것입니다. 다음 코드의 나머지 부분입니다 :하는 대신
public ArrayList<String> readFile(File file) {
ArrayList<String> result = new ArrayList<>();
Scanner reader;
try {
reader = new Scanner(file, "UTF-8");
} catch (FileNotFoundException ex) {
boolean b = file.canRead();
StringWriter errors = new StringWriter();
ex.printStackTrace(new PrintWriter(errors));
JOptionPane.showMessageDialog(null, errors.toString());
alertError("readFile\n" + b + " " + ex.getMessage());
return null;
}
while (reader.hasNext()) {
result.add(reader.nextLine());
}
reader.close();
return result;
}
public File changeFileExtension(File f, String ext) {
String name = f.getAbsolutePath();
int i = name.lastIndexOf(".");
name = name.substring(0, i) + "." + ext;
f = new File(name);
return f;
}
public File convert(File file) {
File binConverter = new File(this.currentPath + "\\GibbedsTools\\Gibbed.Avalanche.BinConvert.exe");
if (!binConverter.exists()) {
alertError("convert\nGibbedsTools is missing, it should be in\n" + this.currentPath + "\\GibbedsTools\\Gibbed.Avalanche.BinConvert.exe");
return null;
}
if (!file.exists()) {
alertError("convert\nFile does not exist\n" + file.getAbsolutePath());
}
String name = file.getName();
String extension = name.substring(name.lastIndexOf(".") + 1, name.length());
Runtime rt = Runtime.getRuntime();
try {
rt.exec("cmd.exe /c " + "\"\"" + this.currentPath + "\\GibbedsTools\\Gibbed.Avalanche.BinConvert.exe\" \"" + file.getAbsolutePath() + "\"\"");
} catch (IOException ex) {
alertError("binToXml\n" + ex.getMessage());
return null;
}
File file2 = changeFileExtension(file, extension.equals("xml") ? "bin" : "xml");
int timepassed = 0;
while (!file2.exists() || !file2.canWrite() || timepassed <= 50) {
try {
Thread.sleep(50);
} catch (InterruptedException ex) {
alertError("binToXml\n" + ex.getMessage());
return null;
}
timepassed += 50;
if (timepassed > 3000) {
if (!file2.exists()) {
alertError("convert\nError, binconverter probably crashed (No xml file created after 3 seconds from passing file to binconverter)\n"
+ "xml file should be in:\n"
+ file2.getAbsolutePath() + " Found: " + file2.exists());
return null;
}
}
if (timepassed > 6000 && !file2.canWrite()) {
alertError("convert\nCan't write to the xml file after 6 seconds from passing the file to binconverter."
+ file2.getAbsolutePath() + " Can write: " + file2.canWrite());
return null;
}
}
return file2;
}
정확히 어떤 시점에서 예외가 있습니까? – nafas
"reader = new Scanner (파일,"UTF-8 ")에서" – FINDarkside
시도해보십시오 : 매개 변수로 파일을 보내는 대신 ur 메서드에서 파일을 만들고 동일한 문제가 있는지 확인하십시오. 동일한 문제가 발생하지 않으면 메서드를 호출하기 전에 잘못된 작업을 수행하고 있습니다 – nafas