Cuando se trata del almacenamiento local de Java, debe operarse mediante flujos IO.
Primero, necesitamos una función createNewFile para crear un archivo:
Copie el código de código de la siguiente manera:
público estático booleano createNewFile (String filePath) {
booleano esSuccess = verdadero;
// Si lo hay, convierte "//" a "/", si no, no habrá cambios.
Cadena filePathTurn = filePath.replaceAll("////", "/");
// Filtrar primero los nombres de los archivos
int índice = filePathTurn.lastIndexOf("/");
Directorio de cadena = filePathTurn.substring(0, índice);
//Creamos la carpeta nuevamente
Archivo fileDir = nuevo Archivo(dir);
isSuccess = fileDir.mkdirs();
//Crear archivo
Archivo archivo = nuevo Archivo (filePathTurn);
intentar {
isSuccess = archivo.createNewFile();
} captura (IOException e) {
esÉxito = falso;
e.printStackTrace();
}
el retorno es Éxito;
}
Luego, necesitamos una función para escribir en el archivo:
Copie el código de código de la siguiente manera:
writeIntoFile booleano estático público (contenido de cadena, ruta de archivo de cadena,
booleano esAppend) {
booleano esSuccess = verdadero;
// Filtrar primero los nombres de los archivos
int índice = filePath.lastIndexOf("/");
Directorio de cadena = filePath.substring(0, índice);
//Crea una ruta al archivo
Archivo fileDir = nuevo Archivo(dir);
fileDir.mkdirs();
//Crea el archivo bajo la ruta nuevamente
Archivo archivo = nulo;
intentar {
archivo = nuevo Archivo(filePath);
archivo.createNewFile();
} captura (IOException e) {
esÉxito = falso;
e.printStackTrace();
}
// escribir en el archivo
FileWriter fileWriter = nulo;
intentar {
fileWriter = nuevo FileWriter (archivo, isAppend);
fileWriter.write(contenido);
fileWriter.flush();
} captura (IOException e) {
esÉxito = falso;
e.printStackTrace();
} finalmente {
intentar {
si (fileWriter! = nulo)
fileWriter.close();
} captura (IOException e) {
e.printStackTrace();
}
}
el retorno es Éxito;
}
Encapsulamos estas dos funciones en un archivo FileReaderWriter.java para su uso posterior.
Luego volvemos al rastreador Zhihu.
Necesitamos agregar una función a la clase de encapsulación Zhihu de Zhihu para formatear la composición tipográfica al escribir en el local.
Copie el código de código de la siguiente manera:
cadena pública writeString() {
Resultado de cadena = "";
resultado += "Pregunta:" + pregunta + "/r/n";
resultado += "Descripción:" + preguntaDescripción + "/r/n";
resultado += "Enlace:" + zhihuUrl + "/r/n";
para (int i = 0; i < respuestas.tamaño(); i++) {
resultado += "respuesta" + i + ":" + respuestas.get(i) + "/r/n";
}
resultado += "/r/n/r/n";
resultado de devolución;
}
Bien, eso es casi todo. A continuación, cambie System.out.println en el método principal a.
Copie el código de código de la siguiente manera:
//Escribir localmente
para (Zhihu zhihu: miZhihu) {
FileReaderWriter.writeIntoFile(zhihu.writeString(),
"D:/Recomendación de Zhihu_Editor.txt", verdadero);
}
Después de ejecutar, puede ver que el contenido visto originalmente en la consola se ha escrito en el archivo txt local:
A primera vista, no tiene nada de malo. Si miras más de cerca, encontrarás un problema: hay demasiadas etiquetas html, principalmente <b> y <br>.
Podemos procesar estas etiquetas durante la salida.
Primero reemplace <br> con /r/n en la secuencia io y luego elimine todas las etiquetas html, para que se vea mucho más claro.
Copie el código de código de la siguiente manera:
cadena pública writeString() {
// Empalmar y escribir cadenas locales
Resultado de cadena = "";
resultado += "Pregunta:" + pregunta + "/r/n";
resultado += "Descripción:" + preguntaDescripción + "/r/n";
resultado += "Enlace:" + zhihuUrl + "/r/n";
para (int i = 0; i < respuestas.tamaño(); i++) {
resultado += "respuesta" + i + ":" + respuestas.get(i) + "/r/n/r/n";
}
resultado += "/r/n/r/n/r/n/r/n";
// Filtrar las etiquetas html que contiene
resultado = resultado.replaceAll("<br>", "/r/n");
resultado = resultado.replaceAll("<.*?>", "");
resultado de devolución;
}
La función reemplazarTodo aquí puede usar expresiones regulares, por lo que todas las etiquetas <> se eliminan al final.