1
1
package util .file_managers ;
2
2
3
- import java .io .File ;
4
- import java .io .FileInputStream ;
5
- import java .io .IOException ;
6
- import java .io .InputStream ;
3
+ import java .io .*;
4
+ import java .net .MalformedURLException ;
5
+ import java .net .URL ;
6
+ import java .net .URLConnection ;
7
+ import java .nio .channels .Channels ;
8
+ import java .nio .channels .FileChannel ;
9
+ import java .nio .channels .ReadableByteChannel ;
7
10
import java .nio .file .Files ;
8
11
import java .nio .file .Path ;
9
12
import java .nio .file .Paths ;
@@ -19,20 +22,29 @@ public class ResourceManager {
19
22
"resources"
20
23
).toString ();
21
24
25
+ private static final String GITHUB_URL = "https://github.com/Explv/Explvs-AIO" ;
26
+
22
27
public static InputStream loadFile (final String relativeFilePath ) {
23
28
if (fileExistsInDataDir (relativeFilePath )) {
24
29
return loadFileFromDataDir (relativeFilePath );
25
30
}
26
31
27
- InputStream jarInputStream = loadFileFromJar (relativeFilePath );
28
-
29
- if (jarInputStream != null ) {
30
- saveFileToDataDirectory (jarInputStream , relativeFilePath );
31
- return loadFileFromDataDir (relativeFilePath );
32
- }
33
-
34
- System .out .println ("Failed to load file" );
35
- return null ;
32
+ // TODO: Loading files from local .jars currently seems to be broken
33
+ // As a stop-gap, we download the files from GitHub if they don't exist locally
34
+ // or are empty.
35
+ saveFileFromGitHubToDataDirectory (relativeFilePath );
36
+ return loadFileFromDataDir (relativeFilePath );
37
+
38
+ //
39
+ // InputStream jarInputStream = loadFileFromJar(relativeFilePath);
40
+ //
41
+ // if (jarInputStream != null) {
42
+ // saveFileToDataDirectory(jarInputStream, relativeFilePath);
43
+ // return loadFileFromDataDir(relativeFilePath);
44
+ // }
45
+ //
46
+ // System.out.println("Failed to load file");
47
+ // return null;
36
48
}
37
49
38
50
private static InputStream loadFileFromJar (final String relativeFilePath ) {
@@ -42,7 +54,7 @@ private static InputStream loadFileFromJar(final String relativeFilePath) {
42
54
43
55
private static boolean fileExistsInDataDir (final String relativeFilePath ) {
44
56
File file = Paths .get (DIRECTORY , relativeFilePath ).toFile ();
45
- return file .exists ();
57
+ return file .exists () && file . length () > 0 ;
46
58
}
47
59
48
60
private static InputStream loadFileFromDataDir (final String relativeFilePath ) {
@@ -66,6 +78,20 @@ private static InputStream loadFileFromDataDir(final String relativeFilePath) {
66
78
return null ;
67
79
}
68
80
81
+ private static void saveFileFromGitHubToDataDirectory (final String relativeFilePath ) {
82
+ try {
83
+ URL url = new URL (GITHUB_URL + "/blob/master/src/main/resources/" + relativeFilePath + "?raw=true" );
84
+ System .out .println ("Saving file from url: " + url .toString ());
85
+
86
+ ReadableByteChannel readableByteChannel = Channels .newChannel (url .openStream ());
87
+
88
+ FileOutputStream fileOutputStream = new FileOutputStream (Paths .get (DIRECTORY , relativeFilePath ).toFile ());
89
+ fileOutputStream .getChannel ().transferFrom (readableByteChannel , 0 , Long .MAX_VALUE );
90
+ } catch (IOException e ) {
91
+ e .printStackTrace ();
92
+ }
93
+ }
94
+
69
95
private static synchronized boolean saveFileToDataDirectory (final InputStream inputStream , final String relativeFilePath ) {
70
96
if (inputStream == null ) {
71
97
return false ;
0 commit comments