]> gitweb.fperrin.net Git - Dictionary.git/blob - jars/icu4j-52_1/tools/misc/src/com/ibm/icu/dev/tool/charsetdet/sbcs/InputFile.java
Added flags.
[Dictionary.git] / jars / icu4j-52_1 / tools / misc / src / com / ibm / icu / dev / tool / charsetdet / sbcs / InputFile.java
1 /*
2  ***********************************************************************
3  * Copyright (C) 2005-2007, International Business Machines Corporation and *
4  * others. All Rights Reserved.                                        *
5  ***********************************************************************
6  *
7  */
8
9 package com.ibm.icu.dev.tool.charsetdet.sbcs;
10
11 import java.io.File;
12 import java.io.FileInputStream;
13 import java.io.InputStreamReader;
14 import java.nio.ByteBuffer;
15 import java.nio.CharBuffer;
16 import java.nio.charset.CharacterCodingException;
17 import java.nio.charset.Charset;
18 import java.nio.charset.CharsetDecoder;
19 import java.nio.charset.CharsetEncoder;
20 import java.nio.charset.CodingErrorAction;
21
22 /**
23  * @author emader
24  *
25  * TODO To change the template for this generated type comment go to
26  * Window - Preferences - Java - Code Style - Code Templates
27  */
28 public class InputFile implements NGramList.NGramKeyMapper
29 {
30
31     private File file;
32     private FileInputStream fileStream;
33     private InputStreamReader inputStream;
34
35     private Charset charset;
36     private CharsetDecoder decoder;
37     private CharsetEncoder encoder;
38     
39     private boolean visualOrder;
40
41     private static void exceptionError(Exception e)
42     {
43         System.err.println("ioError: " + e.toString());
44     }
45
46     /**
47      * 
48      */
49     public InputFile(String filename, String encoding, boolean visual)
50     {
51         file = new File(filename);
52         setEncoding(encoding);
53         visualOrder = visual;
54     }
55     
56     public boolean open()
57     {
58         try {
59             fileStream = new FileInputStream(file);          
60             inputStream = new InputStreamReader(fileStream, "UTF8");
61         } catch (Exception e) {
62             exceptionError(e);
63             return false;
64         }
65         
66         return true;
67     }
68     
69     public void close()
70     {
71         try {
72             inputStream.close();
73             fileStream.close();
74         } catch (Exception e) {
75             // don't really care if this fails...
76         }
77     }
78     
79     public String getFilename()
80     {
81         return file.getName();
82     }
83     
84     public String getParent()
85     {
86         return file.getParent();
87     }
88     
89     public String getPath()
90     {
91         return file.getPath();
92     }
93     
94     public int read(char[] buffer)
95     {
96         int charsRead = -1;
97         
98         try {
99             charsRead = inputStream.read(buffer, 0, buffer.length);
100         } catch (Exception e) {
101             exceptionError(e);
102         }
103         
104         return charsRead;
105     }
106     
107     public void setEncoding(String encoding)
108     {
109         charset = Charset.forName(encoding);
110         decoder = charset.newDecoder();
111         encoder = charset.newEncoder();
112         
113         encoder.onUnmappableCharacter(CodingErrorAction.REPLACE);
114         encoder.onMalformedInput(CodingErrorAction.REPLACE);
115         
116         decoder.onUnmappableCharacter(CodingErrorAction.REPLACE);
117         decoder.onMalformedInput(CodingErrorAction.REPLACE);
118     }
119     
120     public String getEncoding()
121     {
122         return charset.displayName();
123     }
124     
125     public boolean getVisualOrder()
126     {
127         return visualOrder;
128     }
129     
130     public Object mapKey(String key)
131     {
132         byte[] bytes = encode(key.toCharArray());
133         int length   = key.length();
134         int value    = 0;
135         
136         for(int b = 0; b < length; b += 1) {
137             value <<= 8;
138             value += (bytes[b] & 0xFF);
139         }
140
141         return new Integer(value);
142     }
143     
144     public byte[] encode(char[] chars)
145     {
146         CharBuffer cb = CharBuffer.wrap(chars);
147         ByteBuffer bb;
148         
149         try {
150             bb = encoder.encode(cb);
151         } catch (CharacterCodingException e) {
152             // don't expect to get any exceptions in normal usage...
153             return null;
154         }
155
156         return bb.array();
157     }
158     
159     public char[] decode(byte[] bytes)
160     {
161         ByteBuffer bb = ByteBuffer.wrap(bytes);
162         CharBuffer cb;
163         
164         try {
165             cb = decoder.decode(bb);
166         } catch (CharacterCodingException e) {
167             // don't expect to get any exceptions in normal usage...
168             return null;
169         }
170         
171         return cb.array();
172     }
173 }