IO Foundation 3 - 파일 해상도 기 FileParser
위의 문장http://supercharles888.blog.51cto.com/609344/980309 StringTemplate Parser 를 사용 하여 설정 가능 한 규칙 을 동적 으로 이용 할 수 있다 고 언급 했 습 니 다. 자리 표시 자가 있 는 문자열 을 자리 표시 자가 없 는 문자열 로 바 꿉 니 다.그래서 여기 서 언급 한 클래스 FileParser 는 StringTemplate Parser 를 이용 하여 자리 표시 자 가 있 는 파일 을 읽 고 자리 표시 자 가 없 는 파일 로 전환 하 는 것 입 니 다.
직접 코드 올 리 기:
- ...
- // import
-
-
-
- /**
-
- *
-
- * The class can do the file parse work as follows: first it will read the
-
- * content of the input file from the location , then,it will invoke the
-
- * StringTemplateParser utility method to do the parsing work(replacing the
-
- * placeholders) finally, it will generate a new file with the new contents
-
- *
-
- * @author cwang58
-
- * @created date: Aug 2, 2012
-
- */
-
- public class FileParser implements IFileParser {
-
-
-
- private static Logger logger = LoggerFactory.getLogger(FileParser.class);
-
-
-
- private IStringTemplateParser stp;
-
-
-
- public FileParser() throws Exception {
-
-
-
- stp = new StringTemplateParser();
-
-
-
- }
-
-
-
- public IStringTemplateParser getStp() {
-
- return stp;
-
- }
-
-
-
- public void setStp(IStringTemplateParser stp) {
-
- this.stp = stp;
-
- }
-
-
-
- /**
-
- * this method will read the content from the file designated by parameter
-
- *
-
- * @param source
-
- * the location of the file that we read from
-
- * @return the string content of the file
-
- * @throws Exception
-
- */
-
- public String readContentFromFile(String source) throws Exception {
-
-
-
- File file = new File(source);
-
-
-
- // first make sure the source is a file ,not a directory
-
- if (file.isDirectory()) {
-
-
-
- if (logger.isErrorEnabled()) {
-
- logger.error("the source file can not be a directory");
-
- }
-
-
-
- throw new ParameterInvalidException(FILE_REPLACEMENT_ERROR);
-
- }
-
-
-
- // open a file reader to read the file content
-
- BufferedReader reader = null;
-
- try {
-
- reader = new BufferedReader(new FileReader(file));
-
-
-
- StringBuffer bufferedFileContent = new StringBuffer();
-
- String line = null;
-
-
-
- while ((line = reader.readLine()) != null) {
-
- bufferedFileContent.append(line + LINE_SEPARATOR);
-
- }
-
- reader.close();
-
-
-
- return bufferedFileContent.toString();
-
-
-
- } catch (FileNotFoundException ex) {
-
-
-
- if (logger.isErrorEnabled()) {
-
- logger.error("File is not found");
-
-
-
- }
-
- throw new FileReplacerException(FILE_REPLACEMENT_ERROR, ex);
-
- } catch (IOException ex) {
-
-
-
- if (logger.isErrorEnabled()) {
-
- logger.error("IO didn't open or closed");
-
- }
-
- throw new FileReplacerException(FILE_REPLACEMENT_ERROR, ex);
-
-
-
- }
-
-
-
- }
-
-
-
- /**
-
- * This method is used for writing the string content to a file given by
-
- * parameter
-
- *
-
- * @param fileContent
-
- * the string content
-
- * @param destination
-
- * the path of the destination file which we want to write to
-
- * @throws Exception
-
- *
-
- */
-
- public void writeContentToFile(String fileContent, String destination)
-
- throws Exception {
-
-
-
- File file = new File(destination);
-
-
-
- // first make sure the source is a file ,not a directory
-
- if (file.isDirectory()) {
-
-
-
- if (logger.isErrorEnabled()) {
-
- logger.error("the destination file can not be a directory");
-
- }
-
-
-
- throw new ParameterInvalidException("the destination file"
-
- + destination + "can not be a directory");
-
- }
-
-
-
- // open a file writer to write the file content
-
- BufferedWriter writer = null;
-
- try {
-
- writer = new BufferedWriter(new FileWriter(file, false));
-
-
-
- writer.write(fileContent);
-
- writer.flush();
-
-
-
- } catch (FileNotFoundException ex) {
-
-
-
- if (logger.isErrorEnabled()) {
-
- logger.error("File is not found");
-
-
-
- }
-
- throw new FileReplacerException("the file:" + destination
-
- + " can't be found", ex);
-
-
-
- } catch (IOException ex) {
-
-
-
- if (logger.isErrorEnabled()) {
-
- logger.error("IO didn't open or closed");
-
-
-
- }
-
- throw new FileReplacerException(
-
- "can't write the contents into file: " + destination, ex);
-
-
-
- }finally{
-
- writer.close();
-
- }
-
-
-
- }
-
-
-
- /**
-
- * the process for replacing the giving files placeholder
-
- *
-
- * @param source
-
- * the location of the file that has place holder
-
- * @param destination
-
- * the location that put the parsed file
-
- */
-
- public void parseFile(String source, String destination) throws Exception {
-
-
-
- if (logger.isDebugEnabled()) {
-
- logger.debug("the file location which contains placeholder is: "
-
- + source);
-
- logger.debug("the file location that we put back is: "
-
- + destination);
-
- }
-
-
-
- String placeHolderFileContent = readContentFromFile(source);
-
- if (logger.isDebugEnabled()) {
-
- logger.debug("the content in this placeholder's file is: "
-
- + placeHolderFileContent);
-
- }
-
-
-
- if (logger.isDebugEnabled()) {
-
- logger.debug("Begin to use rule builder to replace the placeholders in the source file");
-
- }
-
- String noPlaceHolderFileContent = stp
-
- .parseStringTemplateWithRuleBuilder(placeHolderFileContent);
-
-
-
- if (logger.isDebugEnabled()) {
-
- logger.debug("After parsing ,the file content with no place holder is: "
-
- + noPlaceHolderFileContent);
-
- }
-
-
-
- writeContentToFile(noPlaceHolderFileContent, destination);
-
-
-
- if (logger.isDebugEnabled()) {
-
- logger.debug("writing no placeholder file to " + destination
-
- + " successfully");
-
- }
-
- }
-
-
-
- }
한눈 에 알 수 있 는 세 가지 방법:
(1)readContentFromFile:
이 방법 은 매우 기본 적 인 io 작업 클래스 입 니 다. 그 목적 은 자리 표시 자 를 포함 한 파일 내용 을 문자열 에 읽 는 것 입 니 다. 왜냐하면 우리 가 지난 글 에서 언급 한 StringTemplate Parser 는 문자열 에 관 한 작업 이기 때 문 입 니 다.
(2)writeContentToFile:
이 방법 은 readContent FromFile 과 반대 되 는 일 을 했 습 니 다. 그 렇 죠? 지정 한 파일 에 문자열 내용 (일반적으로 바 뀐 내용) 을 기록 합 니 다.
(3)parseFile:
이 방법 은 바로 (1) 과 (2)결합 하면 readContentFromFile 방법 을 먼저 호출 합 니 다. 자리 표시 자가 있 는 파일 의 내용 을 문자열 변 수 를 읽 은 다음 StringTemplate Parser 류 의 parseStringTemplate With RuleBuilder 방법 을 호출 합 니 다. 자리 표시 자가 있 는 문자열 을 자리 표시 자가 없 는 문자열 로 바 꾸 고 마지막 으로 자리 표시 자가 없 는 문자열 을 writeContentToFile 방법 으로 씁 니 다.지정 한 파일 에 들 어 갑 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.