Skip to content

Commit ea64d8a

Browse files
authored
Merge pull request #3844 from alibaba/developing
Developing
2 parents 0eb0833 + 4e2496a commit ea64d8a

File tree

15 files changed

+189
-32
lines changed

15 files changed

+189
-32
lines changed

.github/workflows/ci.yml

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ jobs:
3737
java-version: ${{ matrix.java }}
3838
distribution: ${{ matrix.distribution }}
3939
- name: Cache local Maven repository
40-
uses: actions/cache@v3
40+
uses: actions/cache@main
4141
with:
4242
path: ~/.m2/repository
4343
key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}
@@ -46,7 +46,11 @@ jobs:
4646
- name: Chmod
4747
run: chmod +x mvnw
4848
- name: Test with Maven
49+
if: ${{ matrix.java == '8' }}
4950
run: ./mvnw test -B -Dmaven.test.skip=false
51+
- name: Test with Maven
52+
if: ${{ matrix.java != '8' }}
53+
run: ./mvnw test -B -Dmaven.test.skip=false -DargLine="--add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.base/sun.reflect.annotation=ALL-UNNAMED"
5054
- name: Maven Build
5155
run: ./mvnw install -B -V
5256
- name: Java Doc

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ easyexcel重写了poi对07版Excel的解析,一个3M的excel用POI sax解析
3333
<dependency>
3434
<groupId>com.alibaba</groupId>
3535
<artifactId>easyexcel</artifactId>
36-
<version>4.0.0</version>
36+
<version>4.0.1</version>
3737
</dependency>
3838
```
3939

easyexcel-core/pom.xml

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -36,9 +36,5 @@
3636
<groupId>org.ehcache</groupId>
3737
<artifactId>ehcache</artifactId>
3838
</dependency>
39-
<dependency>
40-
<groupId>commons-io</groupId>
41-
<artifactId>commons-io</artifactId>
42-
</dependency>
4339
</dependencies>
4440
</project>
Lines changed: 136 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,136 @@
1+
/* ====================================================================
2+
Licensed to the Apache Software Foundation (ASF) under one or more
3+
contributor license agreements. See the NOTICE file distributed with
4+
this work for additional information regarding copyright ownership.
5+
The ASF licenses this file to You under the Apache License, Version 2.0
6+
(the "License"); you may not use this file except in compliance with
7+
the License. You may obtain a copy of the License at
8+
9+
http://www.apache.org/licenses/LICENSE-2.0
10+
11+
Unless required by applicable law or agreed to in writing, software
12+
distributed under the License is distributed on an "AS IS" BASIS,
13+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14+
See the License for the specific language governing permissions and
15+
limitations under the License.
16+
==================================================================== */
17+
18+
package com.alibaba.excel.util;
19+
20+
import java.io.File;
21+
import java.io.IOException;
22+
import java.nio.file.Files;
23+
import java.nio.file.Path;
24+
import java.nio.file.Paths;
25+
import java.nio.file.attribute.FileAttribute;
26+
import java.util.concurrent.locks.Lock;
27+
import java.util.concurrent.locks.ReentrantLock;
28+
29+
import org.apache.poi.util.DefaultTempFileCreationStrategy;
30+
import org.apache.poi.util.TempFileCreationStrategy;
31+
32+
import static org.apache.poi.util.TempFile.JAVA_IO_TMPDIR;
33+
34+
/**
35+
* In the scenario where `poifiles` are cleaned up, the {@link DefaultTempFileCreationStrategy} will throw a
36+
* java.nio.file.NoSuchFileException. Therefore, it is necessary to verify the existence of the temporary file every
37+
* time it is created.
38+
*
39+
* @author Jiaju Zhuang
40+
*/
41+
public class EasyExcelTempFileCreationStrategy implements TempFileCreationStrategy {
42+
/**
43+
* Name of POI files directory in temporary directory.
44+
*/
45+
public static final String POIFILES = "poifiles";
46+
47+
/**
48+
* To use files.deleteOnExit after clean JVM exit, set the <code>-Dpoi.delete.tmp.files.on.exit</code> JVM property
49+
*/
50+
public static final String DELETE_FILES_ON_EXIT = "poi.delete.tmp.files.on.exit";
51+
52+
/**
53+
* The directory where the temporary files will be created (<code>null</code> to use the default directory).
54+
*/
55+
private volatile File dir;
56+
57+
/**
58+
* The lock to make dir initialized only once.
59+
*/
60+
private final Lock dirLock = new ReentrantLock();
61+
62+
/**
63+
* Creates the strategy so that it creates the temporary files in the default directory.
64+
*
65+
* @see File#createTempFile(String, String)
66+
*/
67+
public EasyExcelTempFileCreationStrategy() {
68+
this(null);
69+
}
70+
71+
/**
72+
* Creates the strategy allowing to set the
73+
*
74+
* @param dir The directory where the temporary files will be created (<code>null</code> to use the default
75+
* directory).
76+
* @see Files#createTempFile(Path, String, String, FileAttribute[])
77+
*/
78+
public EasyExcelTempFileCreationStrategy(File dir) {
79+
this.dir = dir;
80+
}
81+
82+
private void createPOIFilesDirectory() throws IOException {
83+
// Create our temp dir only once by double-checked locking
84+
// The directory is not deleted, even if it was created by this TempFileCreationStrategy
85+
if (dir == null || !dir.exists()) {
86+
dirLock.lock();
87+
try {
88+
if (dir == null || !dir.exists()) {
89+
String tmpDir = System.getProperty(JAVA_IO_TMPDIR);
90+
if (tmpDir == null) {
91+
throw new IOException("System's temporary directory not defined - set the -D" + JAVA_IO_TMPDIR
92+
+ " jvm property!");
93+
}
94+
Path dirPath = Paths.get(tmpDir, POIFILES);
95+
dir = Files.createDirectories(dirPath).toFile();
96+
}
97+
} finally {
98+
dirLock.unlock();
99+
}
100+
return;
101+
}
102+
}
103+
104+
@Override
105+
public File createTempFile(String prefix, String suffix) throws IOException {
106+
// Identify and create our temp dir, if needed
107+
createPOIFilesDirectory();
108+
109+
// Generate a unique new filename
110+
File newFile = Files.createTempFile(dir.toPath(), prefix, suffix).toFile();
111+
112+
// Set the delete on exit flag, but only when explicitly disabled
113+
if (System.getProperty(DELETE_FILES_ON_EXIT) != null) {
114+
newFile.deleteOnExit();
115+
}
116+
117+
// All done
118+
return newFile;
119+
}
120+
121+
/* (non-JavaDoc) Created directory path is <JAVA_IO_TMPDIR>/poifiles/prefix0123456789 */
122+
@Override
123+
public File createTempDirectory(String prefix) throws IOException {
124+
// Identify and create our temp dir, if needed
125+
createPOIFilesDirectory();
126+
127+
// Generate a unique new filename
128+
File newDirectory = Files.createTempDirectory(dir.toPath(), prefix).toFile();
129+
130+
//this method appears to be only used in tests, so it is probably ok to use deleteOnExit
131+
newDirectory.deleteOnExit();
132+
133+
// All done
134+
return newDirectory;
135+
}
136+
}

easyexcel-core/src/main/java/com/alibaba/excel/util/FileUtils.java

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
import com.alibaba.excel.exception.ExcelAnalysisException;
1313
import com.alibaba.excel.exception.ExcelCommonException;
1414

15-
import org.apache.poi.util.DefaultTempFileCreationStrategy;
1615
import org.apache.poi.util.TempFile;
1716

1817
/**
@@ -111,7 +110,7 @@ public static FileInputStream openInputStream(final File file) throws IOExceptio
111110
/**
112111
* Write inputStream to file
113112
*
114-
* @param file file
113+
* @param file file
115114
* @param inputStream inputStream
116115
*/
117116
public static void writeToFile(File file, InputStream inputStream) {
@@ -121,8 +120,8 @@ public static void writeToFile(File file, InputStream inputStream) {
121120
/**
122121
* Write inputStream to file
123122
*
124-
* @param file file
125-
* @param inputStream inputStream
123+
* @param file file
124+
* @param inputStream inputStream
126125
* @param closeInputStream closeInputStream
127126
*/
128127
public static void writeToFile(File file, InputStream inputStream, boolean closeInputStream) {
@@ -154,11 +153,8 @@ public static void writeToFile(File file, InputStream inputStream, boolean close
154153
}
155154
}
156155

157-
158156
public static void createPoiFilesDirectory() {
159-
File poiFilesPathFile = new File(poiFilesPath);
160-
createDirectory(poiFilesPathFile);
161-
TempFile.setTempFileCreationStrategy(new DefaultTempFileCreationStrategy(poiFilesPathFile));
157+
TempFile.setTempFileCreationStrategy(new EasyExcelTempFileCreationStrategy());
162158
}
163159

164160
public static File createCacheTmpFile() {
@@ -171,7 +167,6 @@ public static File createTmpFile(String fileName) {
171167
}
172168

173169
/**
174-
*
175170
* @param directory
176171
*/
177172
public static File createDirectory(File directory) {

easyexcel-support/pom.xml

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,8 @@
2424
<version>5.3.37</version>
2525
<exclusions>
2626
<exclusion>
27-
<groupId>org.springframework</groupId>
28-
<artifactId>spring-jcl</artifactId>
27+
<groupId>*</groupId>
28+
<artifactId>*</artifactId>
2929
</exclusion>
3030
</exclusions>
3131
</dependency>
@@ -49,7 +49,7 @@
4949
<createDependencyReducedPom>true</createDependencyReducedPom>
5050
<!-- Make sure the transitive dependencies are written to the generated pom under <dependencies> -->
5151
<promoteTransitiveDependencies>true</promoteTransitiveDependencies>
52-
<artifactSet combine.self="override">
52+
<artifactSet>
5353
<includes>
5454
<include>org.springframework:spring-core</include>
5555
</includes>
@@ -63,6 +63,12 @@
6363
</includes>
6464
</filter>
6565
</filters>
66+
<relocations>
67+
<relocation>
68+
<pattern>org.springframework</pattern>
69+
<shadedPattern>com.alibaba.excel.support</shadedPattern>
70+
</relocation>
71+
</relocations>
6672
</configuration>
6773
</execution>
6874
</executions>

easyexcel-test/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@
7474
<includes>
7575
<include>/com/alibaba/easyexcel/test/core/**/*.java</include>
7676
</includes>
77-
<testFailureIgnore>true</testFailureIgnore>
77+
<testFailureIgnore>false</testFailureIgnore>
7878
</configuration>
7979
</plugin>
8080
</plugins>

easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/dataformat/DateFormatData.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
public class DateFormatData {
1414
private String date;
1515
private String dateStringCn;
16+
private String dateStringCn2;
1617
private String dateStringUs;
1718
private String number;
1819
private String numberStringCn;

easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/dataformat/DateFormatTest.java

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import java.io.File;
44
import java.util.List;
55
import java.util.Locale;
6+
import java.util.Objects;
67

78
import com.alibaba.easyexcel.test.util.TestFileUtil;
89
import com.alibaba.excel.EasyExcel;
@@ -46,15 +47,22 @@ private void readCn(File file) {
4647
List<DateFormatData> list =
4748
EasyExcel.read(file, DateFormatData.class, null).locale(Locale.CHINA).sheet().doReadSync();
4849
for (DateFormatData data : list) {
49-
if (data.getDateStringCn() != null && !data.getDateStringCn().equals(data.getDate())) {
50-
log.info("date:cn:{},{}", data.getDateStringCn(), data.getDate());
50+
if (!Objects.equals(data.getDateStringCn(), data.getDate()) && !Objects.equals(data.getDateStringCn2(),
51+
data.getDate())) {
52+
log.info("date:cn:{},{},{}", data.getDateStringCn(), data.getDateStringCn2(), data.getDate());
5153
}
5254
if (data.getNumberStringCn() != null && !data.getNumberStringCn().equals(data.getNumber())) {
5355
log.info("number:cn{},{}", data.getNumberStringCn(), data.getNumber());
5456
}
5557
}
5658
for (DateFormatData data : list) {
57-
Assertions.assertEquals(data.getDateStringCn(), data.getDate());
59+
// The way dates are read in Chinese is different on Linux and Mac, so it is acceptable if it matches
60+
// either one.
61+
// For example, on Linux: 1-Jan -> 1-1月
62+
// On Mac: 1-Jan -> 1-一月
63+
Assertions.assertTrue(
64+
Objects.equals(data.getDateStringCn(), data.getDate()) || Objects.equals(data.getDateStringCn2(),
65+
data.getDate()));
5866
Assertions.assertEquals(data.getNumberStringCn(), data.getNumber());
5967
}
6068
}

easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/WriteV33Test.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
package com.alibaba.easyexcel.test.temp;
22

3+
import java.io.File;
4+
import java.nio.file.Files;
5+
import java.nio.file.Path;
36
import java.util.ArrayList;
47
import java.util.Date;
58
import java.util.List;
@@ -135,4 +138,11 @@ private List<DemoData> data() {
135138
return list;
136139
}
137140

141+
142+
@Test
143+
public void test4() throws Exception{
144+
Path path= Files.createTempFile(new File("/Users/zhuangjiaju/test/test0422/test/xx").toPath(),System.currentTimeMillis()+"",".jpg");
145+
System.out.println(path);
146+
}
147+
138148
}

easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/large/TempLargeDataTest.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
import java.util.List;
99
import java.util.stream.IntStream;
1010

11-
import com.alibaba.easyexcel.test.core.large.LargeDataTest;
1211
import com.alibaba.easyexcel.test.util.TestFileUtil;
1312
import com.alibaba.excel.EasyExcel;
1413
import com.alibaba.excel.ExcelWriter;
@@ -31,7 +30,7 @@
3130

3231
public class TempLargeDataTest {
3332

34-
private static final Logger LOGGER = LoggerFactory.getLogger(LargeDataTest.class);
33+
private static final Logger LOGGER = LoggerFactory.getLogger(TempLargeDataTest.class);
3534
private int i = 0;
3635

3736
private static File fileFill07;
Binary file not shown.
Binary file not shown.

pom.xml

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020

2121

2222
<properties>
23-
<revision>4.0.0</revision>
23+
<revision>4.0.1</revision>
2424
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
2525
<jdk.version>1.8</jdk.version>
2626
<gpg.skip>true</gpg.skip>
@@ -113,11 +113,6 @@
113113
<artifactId>ehcache</artifactId>
114114
<version>3.9.11</version>
115115
</dependency>
116-
<dependency>
117-
<groupId>commons-io</groupId>
118-
<artifactId>commons-io</artifactId>
119-
<version>2.11.0</version>
120-
</dependency>
121116
<dependency>
122117
<groupId>org.slf4j</groupId>
123118
<artifactId>slf4j-api</artifactId>
@@ -190,12 +185,12 @@
190185
<plugin>
191186
<groupId>org.apache.maven.plugins</groupId>
192187
<artifactId>maven-surefire-plugin</artifactId>
193-
<version>2.22.2</version>
188+
<version>3.3.0</version>
194189
</plugin>
195190
<plugin>
196191
<groupId>org.apache.maven.plugins</groupId>
197192
<artifactId>maven-shade-plugin</artifactId>
198-
<version>3.2.4</version>
193+
<version>3.6.0</version>
199194
</plugin>
200195
<plugin>
201196
<groupId>org.codehaus.mojo</groupId>
@@ -235,11 +230,13 @@
235230
<exclude>com/alibaba/excel/metadata/DataFormatter.java</exclude>
236231
<exclude>com/alibaba/excel/util/DateUtils.java</exclude>
237232
<exclude>com/alibaba/excel/util/MapUtils.java</exclude>
233+
<exclude>com/alibaba/excel/util/EasyExcelTempFileCreationStrategy.java</exclude>
238234
<exclude>com/alibaba/excel/metadata/format/DataFormatter.java</exclude>
239235
<exclude>com/alibaba/excel/metadata/format/ExcelGeneralNumberFormat.java</exclude>
240236
<exclude>com/alibaba/excel/metadata/csv/CsvDataFormat.java</exclude>
241237
<exclude>com/alibaba/excel/write/executor/ExcelWriteFillExecutor.java</exclude>
242238
<exclude>com/alibaba/excel/analysis/v07/handlers/sax/SharedStringsTableHandler.java</exclude>
239+
<exclude>com/alibaba/excel/write/executor/ExcelWriteFillExecutor.java</exclude>
243240
</excludes>
244241
</configuration>
245242
<executions>

0 commit comments

Comments
 (0)