xref: /aosp_15_r20/external/cldr/tools/cldr-code/src/main/java/org/unicode/cldr/util/FileReaders.java (revision 912701f9769bb47905792267661f0baf2b85bed5)
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 import org.unicode.cldr.util.With.SimpleIterator;
15 
16 public class FileReaders {
17     //
18     // public static SemiFileReader fillMapFromSemi(Class classLocation, String fileName,
19     // 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(
55                         "Couldn't open file: " + file + "; relative to class: " + className, e);
56             }
57             throw new IllegalArgumentException(
58                     "Couldn't open file "
59                             + file
60                             + "; in path "
61                             + normalizedPath
62                             + "; relative to class: "
63                             + className,
64                     e);
65         }
66     }
67 
openFile(String directory, String file, Charset charset)68     public static BufferedReader openFile(String directory, String file, Charset charset) {
69         try {
70             return new BufferedReader(
71                     new InputStreamReader(new FileInputStream(new File(directory, file)), charset));
72         } catch (FileNotFoundException e) {
73             throw new IllegalArgumentException(e); // handle dang'd checked exception
74         }
75     }
76 
openFile(String directory, String file)77     public static BufferedReader openFile(String directory, String file) {
78         return openFile(directory, file, StandardCharsets.UTF_8);
79     }
80 
getRelativeFileName(Class<?> class1, String filename)81     public static String getRelativeFileName(Class<?> class1, String filename) {
82         URL resource = class1.getResource(filename);
83         String resourceString = resource.toString();
84         if (resourceString.startsWith("file:")) {
85             return resourceString.substring(5);
86         } else if (resourceString.startsWith("jar:file:")) {
87             return resourceString.substring(9);
88         } else if (resourceString.startsWith("wsjar:file:")) {
89             return resourceString.substring(11);
90         } else {
91             throw new IllegalArgumentException("File not found: " + resourceString);
92         }
93     }
94 
95     public static class ReadLineSimpleIterator implements SimpleIterator<String> {
96         final BufferedReader bufferedReader;
97 
ReadLineSimpleIterator(BufferedReader bufferedReader)98         public ReadLineSimpleIterator(BufferedReader bufferedReader) {
99             super();
100             this.bufferedReader = bufferedReader;
101         }
102 
103         @Override
next()104         public String next() {
105             try {
106                 return bufferedReader.readLine();
107             } catch (IOException e) {
108                 throw new UncheckedIOException(e);
109             }
110         }
111     }
112 }
113