En ce qui concerne le stockage local de Java, il doit être exploité à l'aide de flux IO.
Tout d’abord, nous avons besoin d’une fonction createNewFile pour créer un fichier :
Copiez le code comme suit :
public static boolean createNewFile (String filePath) {
booléen isSuccess = true ;
// Si c'est le cas, convertissez "//" en "/", sinon, il n'y aura aucun changement.
String filePathTurn = filePath.replaceAll("////", "/");
// Filtre d'abord les noms de fichiers
int index = filePathTurn.lastIndexOf("/");
String dir = filePathTurn.substring(0, index);
//Crée à nouveau le dossier
Fichier fileDir = nouveau fichier (dir);
isSuccess = fileDir.mkdirs();
//Créer un fichier
Fichier fichier = nouveau fichier (filePathTurn);
essayer {
isSuccess = file.createNewFile();
} catch (IOException e) {
estSuccès = faux ;
e.printStackTrace();
}
return isSuccès ;
}
Ensuite, nous avons besoin d'une fonction pour écrire dans le fichier :
Copiez le code comme suit :
public static boolean writeIntoFile (Contenu de la chaîne, String filePath,
booléen isAppend) {
booléen isSuccess = true ;
// Filtre d'abord les noms de fichiers
int index = filePath.lastIndexOf("/");
String dir = filePath.substring(0, index);
//Créer un chemin vers le fichier
Fichier fileDir = nouveau fichier (dir);
fileDir.mkdirs();
//Créez à nouveau le fichier sous le chemin
Fichier fichier = nul ;
essayer {
fichier = nouveau fichier (filePath);
fichier.createNewFile();
} catch (IOException e) {
estSuccès = faux ;
e.printStackTrace();
}
// écrire dans un fichier
FileWriter fileWriter = null;
essayer {
fileWriter = nouveau FileWriter(fichier, isAppend);
fileWriter.write(contenu);
fileWriter.flush();
} catch (IOException e) {
estSuccès = faux ;
e.printStackTrace();
} enfin {
essayer {
si (fileWriter != null)
fileWriter.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return isSuccès ;
}
Nous encapsulons ces deux fonctions dans un fichier FileReaderWriter.java pour une utilisation ultérieure.
Ensuite, nous revenons au robot Zhihu.
Nous devons ajouter une fonction à la classe d'encapsulation Zhihu de Zhihu pour formater la composition lors de l'écriture en local.
Copiez le code comme suit :
chaîne publique writeString() {
Résultat de la chaîne = "" ;
résultat += "Question :" + question + "/r/n" ;
result += "Description :" + questionDescription + "/r/n" ;
résultat += "Lien :" + zhihuUrl + "/r/n" ;
pour (int i = 0; i < réponses.size(); i++) {
résultat += "réponse" + i + ":" + réponses.get(i) + "/r/n";
}
résultat += "/r/n/r/n" ;
renvoyer le résultat ;
}
OK, c'est presque tout. Ensuite, remplacez System.out.println dans la méthode principale par
Copiez le code comme suit :
//Écrire localement
pour (Zhihu zhihu : monZhihu) {
FileReaderWriter.writeIntoFile(zhihu.writeString(),
"D:/Recommandation.txt de Zhihu_Editor", vrai);
}
Après l'exécution, vous pouvez voir que le contenu initialement vu dans la console a été écrit dans le fichier txt local :
À première vue, il n'y a rien de mal à cela. Si vous y regardez de plus près, vous constaterez un problème : il y a trop de balises html, principalement <b> et <br>.
Nous pouvons traiter ces balises lors de la sortie.
Remplacez d'abord <br> par /r/n dans le flux io, puis supprimez toutes les balises html, afin que cela paraisse beaucoup plus clair.
Copiez le code comme suit :
chaîne publique writeString() {
// Épisser et écrire des chaînes locales
Résultat de la chaîne = "" ;
résultat += "Question :" + question + "/r/n" ;
result += "Description :" + questionDescription + "/r/n" ;
résultat += "Lien :" + zhihuUrl + "/r/n" ;
pour (int i = 0; i < réponses.size(); i++) {
résultat += "réponse" + i + ":" + réponses.get(i) + "/r/n/r/n";
}
résultat += "/r/n/r/n/r/n/r/n" ;
// Filtre les balises html qu'il contient
result = result.replaceAll("<br>", "/r/n");
result = result.replaceAll("<.*?>", "");
renvoyer le résultat ;
}
La fonction replaceAll ici peut utiliser des expressions régulières, donc toutes les balises <> sont supprimées à la fin.