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