• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 package org.unicode.cldr.util;
2 
3 import java.io.BufferedReader;
4 import java.io.File;
5 import java.io.FileInputStream;
6 import java.io.FileNotFoundException;
7 import java.io.IOException;
8 import java.io.InputStream;
9 import java.io.InputStreamReader;
10 import java.io.UncheckedIOException;
11 import java.net.URL;
12 import java.nio.charset.Charset;
13 import java.nio.charset.StandardCharsets;
14 
15 import org.unicode.cldr.util.With.SimpleIterator;
16 
17 public class FileReaders {
18     //
19     // public static SemiFileReader fillMapFromSemi(Class classLocation, String fileName, SemiFileReader handler) {
20     // return handler.process(classLocation, fileName);
21     // }
openFile(Class<?> class1, String file)22     public static BufferedReader openFile(Class<?> class1, String file) {
23         return openFile(class1, file, StandardCharsets.UTF_8);
24     }
25 
openFile(Class<?> class1, String file, Charset charset)26     public static BufferedReader openFile(Class<?> class1, String file, Charset charset) {
27         // URL path = null;
28         // String externalForm = null;
29         try {
30             // //System.out.println("Reading:\t" + file1.getCanonicalPath());
31             // path = class1.getResource(file);
32             // externalForm = path.toExternalForm();
33             // if (externalForm.startsWith("file:")) {
34             // externalForm = externalForm.substring(5);
35             // }
36             // File file1 = new File(externalForm);
37             // boolean x = file1.canRead();
38             // final InputStream resourceAsStream = new FileInputStream(file1);
39             final InputStream resourceAsStream = class1.getResourceAsStream(file);
40             // String foo = class1.getResource(".").toString();
41             if (charset == null) {
42                 charset = StandardCharsets.UTF_8;
43             }
44             InputStreamReader reader = new InputStreamReader(resourceAsStream, charset);
45             BufferedReader bufferedReader = new BufferedReader(reader, 1024 * 64);
46             return bufferedReader;
47         } catch (Exception e) {
48             String className = class1 == null ? null : class1.getCanonicalName();
49             String normalizedPath = null;
50             try {
51                 String relativeFileName = FileReaders.getRelativeFileName(class1, "../util/");
52                 normalizedPath = PathUtilities.getNormalizedPathString(relativeFileName);
53             } catch (Exception e1) {
54                 throw new IllegalArgumentException("Couldn't open file: " + file + "; relative to class: "
55                     + className, e);
56             }
57             throw new IllegalArgumentException("Couldn't open file " + file + "; in path " + normalizedPath + "; relative to class: "
58                 + className, e);
59         }
60     }
61 
openFile(String directory, String file, Charset charset)62     public static BufferedReader openFile(String directory, String file, Charset charset) {
63         try {
64             return new BufferedReader(new InputStreamReader(new FileInputStream(new File(directory, file)), charset));
65         } catch (FileNotFoundException e) {
66             throw new IllegalArgumentException(e); // handle dang'd checked exception
67         }
68     }
69 
openFile(String directory, String file)70     public static BufferedReader openFile(String directory, String file) {
71         return openFile(directory, file, StandardCharsets.UTF_8);
72     }
73 
getRelativeFileName(Class<?> class1, String filename)74     public static String getRelativeFileName(Class<?> class1, String filename) {
75         URL resource = class1.getResource(filename);
76         String resourceString = resource.toString();
77         if (resourceString.startsWith("file:")) {
78             return resourceString.substring(5);
79         } else if (resourceString.startsWith("jar:file:")) {
80             return resourceString.substring(9);
81         } else if (resourceString.startsWith("wsjar:file:")) {
82             return resourceString.substring(11);
83         } else {
84             throw new IllegalArgumentException("File not found: " + resourceString);
85         }
86     }
87 
88 
89     public static class ReadLineSimpleIterator implements SimpleIterator<String> {
90         final BufferedReader bufferedReader;
91 
ReadLineSimpleIterator(BufferedReader bufferedReader)92         public ReadLineSimpleIterator(BufferedReader bufferedReader) {
93             super();
94             this.bufferedReader = bufferedReader;
95         }
96 
97         @Override
next()98         public String next() {
99             try {
100                 return bufferedReader.readLine();
101             } catch (IOException e) {
102                 throw new UncheckedIOException(e);
103             }
104         }
105     }
106 }
107