diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml
index a468a99..4fe171e 100644
--- a/.idea/jarRepositories.xml
+++ b/.idea/jarRepositories.xml
@@ -16,5 +16,10 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/DoubanDataPraserS/DoubanDataPraserS.iml b/DoubanDataPraserS/DoubanDataPraserS.iml
index f5c051b..a22d6eb 100644
--- a/DoubanDataPraserS/DoubanDataPraserS.iml
+++ b/DoubanDataPraserS/DoubanDataPraserS.iml
@@ -13,5 +13,31 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/DoubanDataPraserS/pom.xml b/DoubanDataPraserS/pom.xml
index 220e752..322d3ee 100644
--- a/DoubanDataPraserS/pom.xml
+++ b/DoubanDataPraserS/pom.xml
@@ -20,12 +20,6 @@
2.8.6
-
- com.google.code.gson
- gson
- 2.8.6
-
-
org.projectlombok
lombok
@@ -38,6 +32,18 @@
poi
5.2.2
+
+
+ org.apache.poi
+ poi-ooxml
+ 5.2.2
+
+
+
+ com.alibaba
+ easyexcel
+ 3.0.5
+
diff --git a/DoubanDataPraserS/src/main/java/me/lensfrex/doubandps/Main.java b/DoubanDataPraserS/src/main/java/me/lensfrex/doubandps/Main.java
index c34c8f8..8cb8ce2 100644
--- a/DoubanDataPraserS/src/main/java/me/lensfrex/doubandps/Main.java
+++ b/DoubanDataPraserS/src/main/java/me/lensfrex/doubandps/Main.java
@@ -1,7 +1,48 @@
package me.lensfrex.doubandps;
+import com.google.gson.*;
+import me.lensfrex.doubandps.data.MovieInformation;
+import me.lensfrex.doubandps.utils.IOUtil;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.nio.charset.StandardCharsets;
+import java.util.ArrayList;
+import java.util.logging.Logger;
+
public class Main {
+ private final static Logger log = Logger.getLogger("MainLogger");
+
public static void main(String[] args) {
+ new Main().run();
+ }
+
+ // 忙,先这样写吧
+ // todo: 等什么时候稍微有空再改改
+ private void run() {
+ // information不可数,但我就是要数
+ ArrayList movieInformations = new ArrayList<>();
+
+ try {
+ InputStream sourceFileStream = getClass().getResourceAsStream("/douban.json");
+ if (sourceFileStream == null) {
+ log.severe("源数据文件不存在,润了,不干了");
+ return;
+ }
+
+ String sourceFileString = IOUtil.inputStreamToString(sourceFileStream, StandardCharsets.UTF_8);
+ JsonArray dataArray = new Gson().fromJson(sourceFileString, JsonArray.class);
+
+ for (int i = 0; i < dataArray.size(); i++) {
+ movieInformations.add(new Gson().fromJson(dataArray.get(i), MovieInformation.class));
+ }
+
+
+ } catch (IOException e) {
+ log.severe("读文件出问题啦:" + e.getMessage());
+ } catch (JsonSyntaxException e) {
+ System.err.println("Json文件数据不对捏:" + e.getMessage());
+ }
}
}
diff --git a/DoubanDataPraserS/src/main/java/me/lensfrex/doubandps/MovieInformation.java b/DoubanDataPraserS/src/main/java/me/lensfrex/doubandps/MovieInformation.java
deleted file mode 100644
index 73763da..0000000
--- a/DoubanDataPraserS/src/main/java/me/lensfrex/doubandps/MovieInformation.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package me.lensfrex.doubandps;
-
-import com.google.gson.annotations.SerializedName;
-import lombok.Data;
-
-@Data
-public class MovieInformation {
- @SerializedName("name_Ch")
- private String chineseName;
-
- @SerializedName("name_Fr")
- private String frenchName;
-
- @SerializedName("num")
- private int id;
-
- private float point;
-
- private int year;
-}
diff --git a/DoubanDataPraserS/src/main/java/me/lensfrex/doubandps/data/MovieInformation.java b/DoubanDataPraserS/src/main/java/me/lensfrex/doubandps/data/MovieInformation.java
new file mode 100644
index 0000000..df81edd
--- /dev/null
+++ b/DoubanDataPraserS/src/main/java/me/lensfrex/doubandps/data/MovieInformation.java
@@ -0,0 +1,28 @@
+package me.lensfrex.doubandps.data;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.google.gson.annotations.SerializedName;
+import lombok.EqualsAndHashCode;
+import lombok.Getter;
+
+
+@Getter
+@EqualsAndHashCode
+public class MovieInformation {
+ @SerializedName("name_Ch")
+ @ExcelProperty("影片名称")
+ private String chineseName;
+
+ @SerializedName("外文名")
+ private String alienName;
+
+ @ExcelProperty("上映年份")
+ private int year;
+
+ @ExcelProperty("评分")
+ private float point;
+
+ @SerializedName("num")
+ @ExcelProperty("评价人数")
+ private int evaluationAmount;
+}
diff --git a/DoubanDataPraserS/src/main/java/me/lensfrex/doubandps/excel/DataExporter.java b/DoubanDataPraserS/src/main/java/me/lensfrex/doubandps/excel/DataExporter.java
new file mode 100644
index 0000000..29371b6
--- /dev/null
+++ b/DoubanDataPraserS/src/main/java/me/lensfrex/doubandps/excel/DataExporter.java
@@ -0,0 +1,9 @@
+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
new file mode 100644
index 0000000..86f4ccc
--- /dev/null
+++ b/DoubanDataPraserS/src/main/java/me/lensfrex/doubandps/excel/ExcelWorker.java
@@ -0,0 +1,74 @@
+package me.lensfrex.doubandps.excel;
+
+import com.alibaba.excel.EasyExcel;
+import com.alibaba.excel.ExcelWriter;
+import com.alibaba.excel.write.metadata.WriteSheet;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collection;
+
+/**
+ * 针对特定数据类进行excel操作的Worker操作类
+ * 其中生成的excel中每个sheet的标题都是根据数据类自动生成的
+ *
+ * @param 指定的数据类class
+ */
+public final class ExcelWorker {
+ private final ExcelWriter excelWriter;
+ private final ArrayList sheets = new ArrayList<>();
+
+ private int sheetAmount = 0;
+
+ /**
+ * 根据指定的数据对象来构造一个ExcelWorker对象,其中每个sheet的标题都是根据传入的clazz设定的,建议使用空白的文件,防止数据意外覆盖
+ *
+ * @param excelFilePath 欲操作的excel文件
+ * @param clazz 初设定的sheet标题
+ * @throws IOException 如果在初始化操作的时候发生I/O异常
+ */
+ 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();
+ }
+ }
+
+ excelWriter = EasyExcel.write(excelFile).head(clazz).build();
+ }
+
+ /**
+ * 根据指定的名字创建一个新的Sheet
+ *
+ * @param sheetName 新的Sheet名字
+ * @return 创建后表格中Sheet数量
+ */
+ public int createNewSheet(String sheetName) {
+ sheets.add(EasyExcel.writerSheet(sheetAmount++, sheetName).build());
+ return sheetAmount;
+ }
+
+ /**
+ * 向指定Index添加数据
+ *
+ * @param sheetIndex 欲添加数据的Sheet的索引
+ * @param source 数据源
+ */
+ public void addAllDataToSheet(int sheetIndex, Collection source) {
+ if (sheetIndex >= sheetAmount) {
+ System.out.println(("sheet索引过大。传入索引:" + sheetIndex + ", 目前sheet总数:" + sheetAmount));
+ return;
+ }
+ excelWriter.write(source, sheets.get(sheetIndex));
+ }
+
+ /**
+ * 结束操作,写入文件
+ */
+ public void finish() {
+ excelWriter.finish();
+ }
+}
diff --git a/DoubanDataPraserS/src/main/java/me/lensfrex/doubandps/utils/IOUtil.java b/DoubanDataPraserS/src/main/java/me/lensfrex/doubandps/utils/IOUtil.java
index 4ea9a95..1e186ec 100644
--- a/DoubanDataPraserS/src/main/java/me/lensfrex/doubandps/utils/IOUtil.java
+++ b/DoubanDataPraserS/src/main/java/me/lensfrex/doubandps/utils/IOUtil.java
@@ -1,44 +1,35 @@
package me.lensfrex.doubandps.utils;
-import java.io.ByteArrayOutputStream;
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.InputStream;
+import java.io.*;
import java.nio.charset.Charset;
public class IOUtil {
- public static String inputStreamToString(InputStream inputStream, Charset charSet) {
- byte[] bytes = readDataFromInputStream(inputStream);
- if (bytes != null) {
- return new String(bytes, charSet);
- } else {
- return null;
- }
+ public static String inputStreamToString(InputStream inputStream, Charset charSet) throws IOException {
+ return new String(readDataFromInputStream(inputStream), charSet);
}
- public static byte[] readDataFromInputStream(InputStream inputStream) {
+ public static byte[] readDataFromInputStream(InputStream inputStream) throws IOException {
return readDataFromInputStream(inputStream, 5);// read every 5kb in default
}
- public static byte[] readDataFromInputStream(InputStream inputStream, int byteAllocation) {
- try {
- ByteArrayOutputStream byteArrayInputStream = new ByteArrayOutputStream();
- byte[] bytes = new byte[1024 * byteAllocation];
+ public static byte[] readDataFromInputStream(InputStream inputStream, int byteAllocation) throws IOException {
+ ByteArrayOutputStream byteArrayInputStream = new ByteArrayOutputStream();
+ byte[] bytes = new byte[1024 * byteAllocation];
- for (int length; (length = inputStream.read(bytes)) != -1; ) {
- byteArrayInputStream.write(bytes, 0, length);
- }
+ for (int length; (length = inputStream.read(bytes)) != -1; ) {
+ byteArrayInputStream.write(bytes, 0, length);
+ }
- byteArrayInputStream.flush();
+ byteArrayInputStream.flush();
- inputStream.close();
- byteArrayInputStream.close();
+ inputStream.close();
+ byteArrayInputStream.close();
- return byteArrayInputStream.toByteArray();
- } catch (Exception e) {
- e.printStackTrace();
- return null;
- }
+ return byteArrayInputStream.toByteArray();
+ }
+
+ public static byte[] getFileData(String path) throws IOException {
+ return readDataFromInputStream(new FileInputStream(path));
}
public static void writeFile(byte[] bytes, File file) throws Exception {
diff --git a/DoubanDataPraserS/src/test/java/me/lensfrex/test/Douban.java b/DoubanDataPraserS/src/test/java/me/lensfrex/test/Douban.java
new file mode 100644
index 0000000..8b8e1d1
--- /dev/null
+++ b/DoubanDataPraserS/src/test/java/me/lensfrex/test/Douban.java
@@ -0,0 +1,23 @@
+package me.lensfrex.test;
+
+import com.alibaba.excel.EasyExcel;
+import com.alibaba.excel.ExcelWriter;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.write.metadata.WriteSheet;
+import me.lensfrex.doubandps.utils.IOUtil;
+
+import java.io.File;
+import java.io.IOException;
+import java.nio.charset.StandardCharsets;
+import java.util.ArrayList;
+import java.util.List;
+
+public class Douban {
+ public static void main(String[] args) {
+ new Douban().run();
+ }
+
+ private void run() {
+
+ }
+}