Java의 로컬 스토리지는 IO 스트림을 사용하여 작동해야 합니다.
먼저 파일을 생성하려면 createNewFile 함수가 필요합니다.
다음과 같이 코드 코드를 복사합니다.
공개 정적 부울 createNewFile(String filePath) {
부울 isSuccess = true;
// 있다면 "//"를 "/"로 변환하고, 없으면 변화가 없습니다.
String filePathTurn = filePath.replaceAll("////", "/");
// 먼저 파일 이름을 필터링합니다.
int index = filePathTurn.lastIndexOf("/");
String dir = filePathTurn.substring(0, index);
//폴더를 다시 생성
파일 fileDir = 새 파일(dir);
isSuccess = fileDir.mkdirs();
//파일 생성
파일 파일 = 새 파일(filePathTurn);
노력하다 {
isSuccess = file.createNewFile();
} 잡기(IOException e) {
isSuccess = 거짓;
e.printStackTrace();
}
isSuccess를 반환합니다.
}
그런 다음 파일에 쓰는 함수가 필요합니다.
다음과 같이 코드 코드를 복사합니다.
공개 정적 부울 writeIntoFile(문자열 내용, 문자열 파일 경로,
부울 isAppend) {
부울 isSuccess = true;
// 먼저 파일 이름을 필터링합니다.
int index = filePath.lastIndexOf("/");
String dir = filePath.substring(0, index);
//파일 경로 생성
파일 fileDir = 새 파일(dir);
fileDir.mkdirs();
//경로 아래에 파일을 다시 생성합니다.
파일 파일 = null;
노력하다 {
파일 = 새 파일(파일 경로);
file.createNewFile();
} 잡기(IOException e) {
isSuccess = 거짓;
e.printStackTrace();
}
// 파일에 쓰기
FileWriter fileWriter = null;
노력하다 {
fileWriter = new FileWriter(file, isAppend);
fileWriter.write(content);
fileWriter.flush();
} 잡기(IOException e) {
isSuccess = 거짓;
e.printStackTrace();
} 마지막으로 {
노력하다 {
if (fileWriter != null)
fileWriter.close();
} 잡기(IOException e) {
e.printStackTrace();
}
}
isSuccess를 반환합니다.
}
우리는 후속 사용을 위해 이 두 함수를 FileReaderWriter.java 파일로 캡슐화합니다.
그런 다음 Zhihu 크롤러로 돌아갑니다.
로컬에 쓸 때 조판 형식을 지정하려면 Zhihu의 Zhihu 캡슐화 클래스에 함수를 추가해야 합니다.
다음과 같이 코드 코드를 복사합니다.
공개 문자열 writeString() {
문자열 결과 = "";
결과 += "질문:" + 질문 + "/r/n";
결과 += "설명:" + 질문설명 + "/r/n";
결과 += "링크:" + zhihuUrl + "/r/n";
for (int i = 0; i < Answers.size(); i++) {
결과 += "답변" + i + ":" + Answers.get(i) + "/r/n";
}
결과 += "/r/n/r/n";
결과 반환;
}
이제 거의 다 되었습니다. 다음으로 기본 메서드에서 System.out.println을 다음으로 변경합니다.
다음과 같이 코드 코드를 복사합니다.
//로컬로 쓰기
for (Zhihu zhihu : myZhihu) {
FileReaderWriter.writeIntoFile(zhihu.writeString(),
"D:/Zhihu_Editor의 추천.txt", true);
}
실행 후 원래 콘솔에 표시된 콘텐츠가 로컬 txt 파일에 기록되었음을 확인할 수 있습니다.
언뜻 보면 아무 문제가 없습니다. 자세히 살펴보면 문제가 있습니다. 주로 <b> 및 <br>과 같은 html 태그가 너무 많습니다.
출력 중에 이러한 태그를 처리할 수 있습니다.
먼저 io 스트림에서 <br>을 /r/n으로 바꾼 다음 모든 html 태그를 삭제하면 훨씬 더 명확해집니다.
다음과 같이 코드 코드를 복사합니다.
공개 문자열 writeString() {
// 로컬 문자열을 연결하고 쓰기
문자열 결과 = "";
결과 += "질문:" + 질문 + "/r/n";
결과 += "설명:" + 질문설명 + "/r/n";
결과 += "링크:" + zhihuUrl + "/r/n";
for (int i = 0; i < Answers.size(); i++) {
결과 += "답변" + i + ":" + Answers.get(i) + "/r/n/r/n";
}
결과 += "/r/n/r/n/r/n/r/n";
// html 태그를 필터링합니다.
result = result.replaceAll("<br>", "/r/n");
result = result.replaceAll("<.*?>", "");
결과 반환;
}
여기서 replacementAll 함수는 정규식을 사용할 수 있으므로 마지막에 <> 태그가 모두 삭제됩니다.