Quando se trata de armazenamento local do Java, ele deve ser operado usando fluxos de IO.
Primeiro, precisamos de uma função createNewFile para criar um arquivo:
Copie o código do código da seguinte forma:
public static boolean createNewFile(String filePath) {
boolean isSuccess = true;
// Se houver, converta "//" em "/", caso contrário, não haverá alteração.
String filePathTurn = filePath.replaceAll("////", "/");
//Filtre os nomes dos arquivos primeiro
int índice = filePathTurn.lastIndexOf("/");
String dir = filePathTurn.substring(0, índice);
//Cria a pasta novamente
Arquivo arquivoDir = novo arquivo(dir);
isSuccess = fileDir.mkdirs();
//Criar arquivo
Arquivo arquivo = new Arquivo(filePathTurn);
tentar {
isSuccess = arquivo.createNewFile();
} catch (IOException e) {
éSucesso = falso;
e.printStackTrace();
}
retornar éSucesso;
}
Então, precisamos de uma função para escrever no arquivo:
Copie o código do código da seguinte forma:
public static boolean writeIntoFile (String conteúdo, String filePath,
booleano isAppend) {
boolean isSuccess = true;
//Filtre os nomes dos arquivos primeiro
int índice = filePath.lastIndexOf("/");
String dir = filePath.substring(0, índice);
//Cria um caminho para o arquivo
Arquivo arquivoDir = novo arquivo(dir);
arquivoDir.mkdirs();
//Cria o arquivo no caminho novamente
Arquivo arquivo = null;
tentar {
arquivo = novo arquivo(caminhoArquivo);
arquivo.createNewFile();
} catch (IOException e) {
éSucesso = falso;
e.printStackTrace();
}
// escreve no arquivo
FileWriter fileWriter = null;
tentar {
fileWriter = new FileWriter(arquivo, isAppend);
arquivoWriter.write (conteúdo);
fileWriter.flush();
} catch (IOException e) {
éSucesso = falso;
e.printStackTrace();
} finalmente {
tentar {
if (fileWriter! = nulo)
arquivoWriter.close();
} catch (IOException e) {
e.printStackTrace();
}
}
retornar éSucesso;
}
Encapsulamos essas duas funções em um arquivo FileReaderWriter.java para uso posterior.
Então voltamos ao rastreador Zhihu.
Precisamos adicionar uma função à classe de encapsulamento Zhihu de Zhihu para formatar a composição ao escrever no local.
Copie o código do código da seguinte forma:
string pública writeString() {
Resultado da string = "";
resultado += "Pergunta:" + pergunta + "/r/n";
resultado += "Descrição:" + questionDescrição + "/r/n";
resultado += "Link:" + zhihuUrl + "/r/n";
for (int i = 0; i < respostas.size(); i++) {
resultado += "resposta" + i + ":" + respostas.get(i) + "/r/n";
}
resultado += "/r/n/r/n";
resultado de retorno;
}
OK, é quase isso. Em seguida, altere System.out.println no método principal para.
Copie o código do código da seguinte forma:
//Escreve localmente
para (Zhihu zhihu: meuZhihu) {
FileReaderWriter.writeIntoFile(zhihu.writeString(),
"D:/recomendação do Zhihu_Editor.txt", verdadeiro);
}
Após a execução, você pode ver que o conteúdo visto originalmente no console foi gravado no arquivo txt local:
À primeira vista, não há nada de errado com isso. Se você olhar mais de perto, encontrará um problema: há muitas tags HTML, principalmente <b> e <br>.
Podemos processar essas tags durante a saída.
Primeiro substitua <br> por /r/n no fluxo io e, em seguida, exclua todas as tags html, para que fique muito mais claro.
Copie o código do código da seguinte forma:
string pública writeString() {
// Une e escreve strings locais
Resultado da string = "";
resultado += "Pergunta:" + pergunta + "/r/n";
resultado += "Descrição:" + questionDescrição + "/r/n";
resultado += "Link:" + zhihuUrl + "/r/n";
for (int i = 0; i < respostas.size(); i++) {
resultado += "resposta" + i + ":" + respostas.get(i) + "/r/n/r/n";
}
resultado += "/r/n/r/n/r/n/r/n";
//Filtre as tags HTML nele
resultado = resultado.replaceAll("<br>", "/r/n");
resultado = resultado.replaceAll("<.*?>", "");
resultado de retorno;
}
A função replaceAll aqui pode usar expressões regulares, portanto, todas as tags <> são excluídas no final.