2 ***********************************************************************
3 * Copyright (C) 2005-2007, International Business Machines Corporation and *
4 * others. All Rights Reserved. *
5 ***********************************************************************
9 package com.ibm.icu.dev.tool.charsetdet.sbcs;
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;
25 * TODO To change the template for this generated type comment go to
26 * Window - Preferences - Java - Code Style - Code Templates
28 public class InputFile implements NGramList.NGramKeyMapper
32 private FileInputStream fileStream;
33 private InputStreamReader inputStream;
35 private Charset charset;
36 private CharsetDecoder decoder;
37 private CharsetEncoder encoder;
39 private boolean visualOrder;
41 private static void exceptionError(Exception e)
43 System.err.println("ioError: " + e.toString());
49 public InputFile(String filename, String encoding, boolean visual)
51 file = new File(filename);
52 setEncoding(encoding);
59 fileStream = new FileInputStream(file);
60 inputStream = new InputStreamReader(fileStream, "UTF8");
61 } catch (Exception e) {
74 } catch (Exception e) {
75 // don't really care if this fails...
79 public String getFilename()
81 return file.getName();
84 public String getParent()
86 return file.getParent();
89 public String getPath()
91 return file.getPath();
94 public int read(char[] buffer)
99 charsRead = inputStream.read(buffer, 0, buffer.length);
100 } catch (Exception e) {
107 public void setEncoding(String encoding)
109 charset = Charset.forName(encoding);
110 decoder = charset.newDecoder();
111 encoder = charset.newEncoder();
113 encoder.onUnmappableCharacter(CodingErrorAction.REPLACE);
114 encoder.onMalformedInput(CodingErrorAction.REPLACE);
116 decoder.onUnmappableCharacter(CodingErrorAction.REPLACE);
117 decoder.onMalformedInput(CodingErrorAction.REPLACE);
120 public String getEncoding()
122 return charset.displayName();
125 public boolean getVisualOrder()
130 public Object mapKey(String key)
132 byte[] bytes = encode(key.toCharArray());
133 int length = key.length();
136 for(int b = 0; b < length; b += 1) {
138 value += (bytes[b] & 0xFF);
141 return new Integer(value);
144 public byte[] encode(char[] chars)
146 CharBuffer cb = CharBuffer.wrap(chars);
150 bb = encoder.encode(cb);
151 } catch (CharacterCodingException e) {
152 // don't expect to get any exceptions in normal usage...
159 public char[] decode(byte[] bytes)
161 ByteBuffer bb = ByteBuffer.wrap(bytes);
165 cb = decoder.decode(bb);
166 } catch (CharacterCodingException e) {
167 // don't expect to get any exceptions in normal usage...