Java のローカル ストレージに関しては、IO ストリームを使用して操作する必要があります。
まず、ファイルを作成する関数 createNewFile が必要です。
次のようにコードをコピーします。
public static boolean createNewFile(String filePath) {
ブール値 isSuccess = true;
// 存在する場合は「//」を「/」に変換し、存在しない場合は変化しません。
String filePathTurn = filePath.replaceAll("////", "/");
// 最初にファイル名を除外します
int インデックス = filePathTurn.lastIndexOf("/");
文字列 dir = filePathTurn.substring(0, インデックス);
// フォルダーを再作成します
ファイル fileDir = 新しいファイル(ディレクトリ);
isSuccess = fileDir.mkdirs();
//ファイルを作成
ファイル file = 新しいファイル(filePathTurn);
試す {
isSuccess = file.createNewFile();
} キャッチ (IOException e) {
isSuccess = false;
e.printStackTrace();
}
戻り値は成功です。
}
次に、ファイルに書き込む関数が必要です。
次のようにコードをコピーします。
public static boolean writeIntoFile(String content, String filePath,
ブール値 isAppend) {
ブール値 isSuccess = true;
// 最初にファイル名を除外します
int インデックス = filePath.lastIndexOf("/");
文字列 dir = filePath.substring(0, インデックス);
// ファイルへのパスを作成します
ファイル fileDir = 新しいファイル(ディレクトリ);
ファイルディレクトリ.mkdirs();
//パス配下にファイルを再作成
ファイル file = null;
試す {
ファイル = 新しいファイル(ファイルパス);
file.createNewFile();
} キャッチ (IOException e) {
isSuccess = false;
e.printStackTrace();
}
// ファイルに書き込む
FileWriter ファイルライター = null;
試す {
fileWriter = 新しい FileWriter(file, isAppend);
fileWriter.write(コンテンツ);
fileWriter.flush();
} キャッチ (IOException e) {
isSuccess = false;
e.printStackTrace();
} ついに {
試す {
if (fileWriter != null)
fileWriter.close();
} キャッチ (IOException e) {
e.printStackTrace();
}
}
戻り値は成功です。
}
これら 2 つの関数を、後で使用できるように FileReaderWriter.java ファイルにカプセル化します。
次に、Zhihu クローラーに戻ります。
ローカルに書き込むときに植字をフォーマットする関数を Zhihu の Zhihu カプセル化クラスに追加する必要があります。
次のようにコードをコピーします。
public String writeString() {
文字列結果 = "";
結果 += "質問:" + 質問 + "/r/n";
result += "説明:" + questionDescription + "/r/n";
結果 += "リンク:" + zhihuUrl + "/r/n";
for (int i = 0; i <answer.size(); i++) {
result += "答え" + i + ":" + Answers.get(i) + "/r/n";
}
結果 += "/r/n/r/n";
結果を返します。
}
OK、これでほぼ完了です。 次に、main メソッドの System.out.println を次のように変更します。
次のようにコードをコピーします。
//ローカルに書き込む
for (Zhihu zhihu : myZhihu) {
FileReaderWriter.writeIntoFile(zhihu.writeString(),
"D:/Zhihu_Editor の推奨事項.txt"、true);
}
実行後、最初にコンソールに表示されていたコンテンツがローカル txt ファイルに書き込まれていることがわかります。
一見すると何も問題はありませんが、よく見てみると、HTML タグ (主に <b> と <br>) が多すぎることがわかります。
これらのタグは出力中に処理できます。
まず、io ストリーム内の <br> を /r/n に置き換えてから、すべての html タグを削除すると、よりわかりやすくなります。
次のようにコードをコピーします。
public String writeString() {
// ローカル文字列を結合して書き込みます
文字列結果 = "";
結果 += "質問:" + 質問 + "/r/n";
result += "説明:" + questionDescription + "/r/n";
結果 += "リンク:" + zhihuUrl + "/r/n";
for (int i = 0; i <answer.size(); i++) {
result += "答え" + 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("<.*?>", "");
結果を返します。
}
ここでの replaceAll 関数は正規表現を使用できるため、最後にすべての <> タグが削除されます。