diff --git a/DoubanDataPraserS/src/main/java/me/lensfrex/doubandps/Main.java b/DoubanDataPraserS/src/main/java/me/lensfrex/doubandps/Main.java index 8cb8ce2..888c39b 100644 --- a/DoubanDataPraserS/src/main/java/me/lensfrex/doubandps/Main.java +++ b/DoubanDataPraserS/src/main/java/me/lensfrex/doubandps/Main.java @@ -2,6 +2,7 @@ package me.lensfrex.doubandps; import com.google.gson.*; import me.lensfrex.doubandps.data.MovieInformation; +import me.lensfrex.doubandps.data.MovieInformationDataExporter; import me.lensfrex.doubandps.utils.IOUtil; import java.io.IOException; @@ -37,7 +38,9 @@ public class Main { movieInformations.add(new Gson().fromJson(dataArray.get(i), MovieInformation.class)); } + MovieInformationDataExporter movieInformationDataExporter = new MovieInformationDataExporter("./douban.xlsx", MovieInformation.class); + movieInformationDataExporter.exportInformationByYear(movieInformations); } catch (IOException e) { log.severe("读文件出问题啦:" + e.getMessage()); diff --git a/DoubanDataPraserS/src/main/java/me/lensfrex/doubandps/data/MovieInformation.java b/DoubanDataPraserS/src/main/java/me/lensfrex/doubandps/data/MovieInformation.java index df81edd..b7a71e8 100644 --- a/DoubanDataPraserS/src/main/java/me/lensfrex/doubandps/data/MovieInformation.java +++ b/DoubanDataPraserS/src/main/java/me/lensfrex/doubandps/data/MovieInformation.java @@ -5,24 +5,24 @@ import com.google.gson.annotations.SerializedName; import lombok.EqualsAndHashCode; import lombok.Getter; - @Getter @EqualsAndHashCode public class MovieInformation { @SerializedName("name_Ch") - @ExcelProperty("影片名称") + @ExcelProperty(index = 0, value = "影片名称") private String chineseName; - @SerializedName("外文名") + @SerializedName("name_Fr") + @ExcelProperty(index = 1, value = "外文名") private String alienName; - @ExcelProperty("上映年份") + @ExcelProperty(index = 2, value = "上映年份") private int year; - @ExcelProperty("评分") + @ExcelProperty(index = 3, value = "评分") private float point; @SerializedName("num") - @ExcelProperty("评价人数") + @ExcelProperty(index = 4, value = "评价人数") private int evaluationAmount; } diff --git a/DoubanDataPraserS/src/main/java/me/lensfrex/doubandps/data/MovieInformationDataExporter.java b/DoubanDataPraserS/src/main/java/me/lensfrex/doubandps/data/MovieInformationDataExporter.java new file mode 100644 index 0000000..c1a1e26 --- /dev/null +++ b/DoubanDataPraserS/src/main/java/me/lensfrex/doubandps/data/MovieInformationDataExporter.java @@ -0,0 +1,66 @@ +package me.lensfrex.doubandps.data; + +import me.lensfrex.doubandps.excel.ExcelWorker; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; +import java.util.logging.Logger; + +public class MovieInformationDataExporter { + private static final Logger log = Logger.getLogger("DataExporterLogger"); + + ExcelWorker excelWorker = null; + private final Class dataClass; + + public MovieInformationDataExporter(String excelFilePath, Class dataClass) { + this.dataClass = dataClass; + this.createNewExcelWorker(excelFilePath); + } + + public boolean createNewExcelWorker(String newExcelFilePath) { + try { + excelWorker = new ExcelWorker<>(newExcelFilePath, dataClass); + } catch (IOException e) { + excelWorker = null; + log.severe("创建ExcelWorker时出现I/O问题。ErrMessage:" + e.getMessage() + + "指定的Excel文件路径:" + newExcelFilePath); + + return false; + } catch (Exception e) { + excelWorker = null; + log.severe("创建ExcelWorker时发生未知错误.ErrMessage:" + e.getMessage() + + "指定的Excel文件路径:" + newExcelFilePath); + + return false; + } + + return true; + } + + public void insertDataIntoExcel(int sheetIndex, Collection source) { + excelWorker.addAllDataToSheet(sheetIndex, source); + } + + public void exportInformationByYear(List source) { + excelWorker.createNewSheet("2000年前"); + int sheetAmount = excelWorker.createNewSheet("2000年后"); + + ArrayList movieBefore2000 = new ArrayList<>(); + ArrayList movieAfter2000 = new ArrayList<>(); + for (MovieInformation movieInformation : source) { + if (movieInformation.getYear() < 2000) { + movieBefore2000.add(movieInformation); + } else { + movieAfter2000.add(movieInformation); + } + } + + excelWorker.addAllDataToSheet(sheetAmount - 2, movieBefore2000); + excelWorker.addAllDataToSheet(sheetAmount - 1, movieAfter2000); + + excelWorker.finish(); + log.info("已完成导出。"); + } +} diff --git a/DoubanDataPraserS/src/main/java/me/lensfrex/doubandps/excel/DataExporter.java b/DoubanDataPraserS/src/main/java/me/lensfrex/doubandps/excel/DataExporter.java deleted file mode 100644 index 29371b6..0000000 --- a/DoubanDataPraserS/src/main/java/me/lensfrex/doubandps/excel/DataExporter.java +++ /dev/null @@ -1,9 +0,0 @@ -package me.lensfrex.doubandps.excel; - -import me.lensfrex.doubandps.data.MovieInformation; - -public class DataExporter { - - public DataExporter() { - } -} diff --git a/DoubanDataPraserS/src/main/java/me/lensfrex/doubandps/excel/ExcelWorker.java b/DoubanDataPraserS/src/main/java/me/lensfrex/doubandps/excel/ExcelWorker.java index 86f4ccc..7dc4ab5 100644 --- a/DoubanDataPraserS/src/main/java/me/lensfrex/doubandps/excel/ExcelWorker.java +++ b/DoubanDataPraserS/src/main/java/me/lensfrex/doubandps/excel/ExcelWorker.java @@ -8,6 +8,7 @@ import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.Collection; +import java.util.logging.Logger; /** * 针对特定数据类进行excel操作的Worker操作类 @@ -16,6 +17,8 @@ import java.util.Collection; * @param 指定的数据类class */ public final class ExcelWorker { + private final static Logger log = Logger.getLogger("ExcelWorkerLogger"); + private final ExcelWriter excelWriter; private final ArrayList sheets = new ArrayList<>(); @@ -30,11 +33,11 @@ public final class ExcelWorker { */ public ExcelWorker(String excelFilePath, Class clazz) throws IOException { File excelFile = new File(excelFilePath); - if (!excelFile.exists()) { - File parent = excelFile.getParentFile(); - if (parent.mkdirs()) { - parent.createNewFile(); - } + if (excelFile.exists()) { + log.warning("目标excel文件\"" + excelFilePath + "\"已存在,可能会覆盖原有数据或excel文件读取失败。"); + } else { + excelFile.getParentFile().mkdirs(); + excelFile.createNewFile(); } excelWriter = EasyExcel.write(excelFile).head(clazz).build(); @@ -71,4 +74,8 @@ public final class ExcelWorker { public void finish() { excelWriter.finish(); } + + public int getSheetAmount() { + return sheetAmount; + } }