사실, 작성한 직후 XML 리소스가 사용하는 파일을 만듭니다. 프로그램 실행이 끝나면 파일을 삭제해야합니다.Java 프로그램이 쓰여진 후에 파일 쓰기를 사용할 수 없습니다.
내가 프로그램을 실행, 파일은 아직 ... 파일 FileWriter 사용하여 작성해야합니다 존재하지 않습니다 :
File file = new File("src/main/resources/org/avalin/optaplanner/solver/employeeShiftsScoreRules.drl");
try (FileWriter fileWriter = new FileWriter(file))
{
fileWriter.write("Content...");
fileWriter.flush();
fileWriter.close();
}
catch(IOException e)
{
e.printStackTrace();
}
를 그리고이 코드가 있습니다
private static synchronized Solver buildSolver()
{
SolverFactory solverFactory =
SolverFactory.createFromXmlResource(SOLVER_CONFIG_XML);
return solverFactory.buildSolver();
}
를이 일어나는 것이다
filewriting도 동기화 된 메서드로 래핑됩니다. 그러나 나는 동일한 변수에 직접 액세스하지 않기 때문에 아무런 효과가 없다고 가정합니다. 파일을 위에 표시된 SOLVER_CONFIG_XML에서 읽습니다.
프로그램이 끝나면 지정된 경로의 파일을 삭제하므로 다음에 실행될 때 프로그램에 지정된 매개 변수에 따라 생성됩니다.
지금이 파일이 기록되지 않습니다 말, 내가 오류가 프로그램을 처음 실행 ... 일 것입니다. 스레드 "주요"java.lang.IllegalArgumentException가의
는예외 : scoreDrl (조직/avalin/optaplanner/해결사/employeeShiftsScoreRules.drl는) 클래스 로더
I의 클래스 패스 자원으로 존재하지 않는 파일 쓰기 직후에 인쇄물을 만들 수 있지만, 처음에는이 방법을 사용하지 않았지만 어떤 이유로 든 프로그램이 처음 실행되기 전에 파일이 "생성"되지 않았습니다.
두 번째로, 예외가 발생하기 전에 파일이 생성되었으므로 프로그램이 정상적으로 실행됩니까?
내 프로그램의 다음 부분이 실행되기 전에 파일이 "완전 작성"되어 있는지 확인하는 방법이 있습니까? 파일은 사용자가 입력 한 내용에서 동적으로 생성되므로 매번 길이가 다르므로 확인할 수 없습니다. 필자는 fileWriter.close()에서 만든 프린트를 실행 했으므로 완전히 쓰여졌을 것으로 추측 하겠지만 명백하게는 그렇지 않습니다.
시작시 클래스 로더가 사용 가능한 파일을 캐시하는 것처럼 보입니다. 캐시를 무효화하거나 사용자 정의 클래스 로더를 사용해야 할 수도 있습니다. – daniu