Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Написать программу которая сохраняет в разные файлы java

Анна Раевская(Баранова) Ученик (12), на голосовании 5 месяцев назад
Добрый день! Помогите-приведите пример .Написать программу ,которая сохраняет в разные файлы 50 случайных статей из Википедии
Голосование за лучший ответ
Татьяна Просветленный (36384) 6 месяцев назад
Добрый день! Для реализации программы, которая сохраняет 50 случайных статей из Википедии в разные файлы на языке Java, можно использовать библиотеку Jsoup для извлечения данных с веб-страниц и стандартные средства для работы с файлами. Вот пример такой программы:

Добавьте библиотеку Jsoup в ваш проект. Если вы используете Maven, добавьте следующие зависимости в ваш pom.xml файл:
  
org.jsoup
jsoup
1.13.1

Напишите код для извлечения случайных статей из Википедии и сохранения их в файлы:
 import org.jsoup.Jsoup; 
import org.jsoup.nodes.Document;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Random;

public class WikipediaRandomArticles {

private static final String RANDOM_WIKIPEDIA_URL = "https://en.wikipedia.org/wiki/Special:Random";
private static final int NUMBER_OF_ARTICLES = 50;
private static final String OUTPUT_DIRECTORY = "wiki_articles/";

public static void main(String[] args) {
try {
File directory = new File(OUTPUT_DIRECTORY);
if (!directory.exists()) {
directory.mkdir();
}

for (int i = 1; i <= NUMBER_OF_ARTICLES; i++) {
try {
Document doc = Jsoup.connect(RANDOM_WIKIPEDIA_URL).get();
String title = doc.title();
String content = doc.body().text();

saveArticleToFile(i, title, content);
System.out.println("Saved article " + i + ": " + title);
} catch (IOException e) {
System.err.println("Error fetching article " + i + ": " + e.getMessage());
}

// Wait for a short period to avoid being blocked by Wikipedia
Thread.sleep(new Random().nextInt(2000) + 1000);
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}

private static void saveArticleToFile(int index, String title, String content) {
String filename = OUTPUT_DIRECTORY + "article_" + index + ".txt";
try (FileWriter writer = new FileWriter(filename)) {
writer.write("Title: " + title + "\n\n");
writer.write(content);
} catch (IOException e) {
System.err.println("Error writing article " + index + ": " + e.getMessage());
}
}
}
Запустите программу, и она начнет извлекать 50 случайных статей из Википедии и сохранять их в отдельные файлы в указанной директории.
Объяснение кода:
  1. Используется библиотека Jsoup для подключения и извлечения данных из случайных страниц Википедии.
  2. В цикле for происходит извлечение и сохранение 50 статей.
  3. Заголовок и содержимое каждой статьи извлекаются и сохраняются в текстовый файл с именем article_<номер>.txt.
Между запросами к Википедии устанавливается случайная задержка, чтобы избежать блокировки со стороны сервера.
Анна Раевская(Баранова)Ученик (12) 6 месяцев назад
Спасибо огромное!
Sergio 2.1 Оракул (67427) 6 месяцев назад
Для работы с JSON будем использовать библиотеку org.json. Если вы используете Maven, добавьте следующую зависимость в ваш pom.xml:
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20210307</version>
</dependency>

Код программы
 import java.io.BufferedWriter; 
import java.io.FileWriter;
import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

import org.json.JSONArray;
import org.json.JSONObject;

public class WikipediaRandomArticles {

private static final String WIKIPEDIA_API_URL = "https://en.wikipedia.org/w/api.php?action=query&format=json&generator=random&grnnamespace=0&prop=extracts&explaintext=true&exchars=2000&grnlimit=50";

public static void main(String[] args) {
try {
String jsonResponse = getJsonResponse(WIKIPEDIA_API_URL);
JSONObject jsonObject = new JSONObject(jsonResponse);
JSONObject queryObject = jsonObject.getJSONObject("query");
JSONObject pagesObject = queryObject.getJSONObject("pages");

for (String pageId : pagesObject.keySet()) {
JSONObject page = pagesObject.getJSONObject(pageId);
String title = page.getString("title");
String extract = page.getString("extract");

saveToFile(title, extract);
}
} catch (Exception e) {
e.printStackTrace();
}
}

private static String getJsonResponse(String urlString) throws IOException {
URL url = new URL(urlString);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");

Scanner scanner = new Scanner(connection.getInputStream());
StringBuilder response = new StringBuilder();
while (scanner.hasNext()) {
response.append(scanner.nextLine());
}
scanner.close();

return response.toString();
}

private static void saveToFile(String title, String content) {
String fileName = title.replaceAll("[^a-zA-Z0-9\\.\\-]", "_") + ".txt";
try (BufferedWriter writer = new BufferedWriter(new FileWriter(fileName))) {
writer.write(content);
System.out.println("Saved: " + fileName);
} catch (IOException e) {
e.printStackTrace();
}
}
}
Этот код запросит 50 случайных статей из Википедии и сохранит их в отдельные файлы с именами, соответствующими заголовкам статей. Заголовки будут очищены от недопустимых символов, чтобы избежать проблем с именами файлов.
Анна Раевская(Баранова)Ученик (12) 6 месяцев назад
Спасибо!
Похожие вопросы