次のコードは、印刷できないASCII文字をフィルタリングします。
package sandbox;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
/**
*
* @author yan-cheng.cheok
*/
public class Main {
// Returns the contents of the file in a byte array.
public static byte[] getBytesFromFile(File file) throws IOException {
InputStream is = new FileInputStream(file);
// Get the size of the file
long length = file.length();
// You cannot create an array using a long type.
// It needs to be an int type.
// Before converting to an int type, check
// to ensure that file is not larger than Integer.MAX_VALUE.
if (length > Integer.MAX_VALUE) {
// File is too large
}
// Create the byte array to hold the data
byte[] bytes = new byte[(int)length];
// Read in the bytes
int offset = 0;
int numRead = 0;
while (offset < bytes.length
&& (numRead=is.read(bytes, offset, bytes.length-offset)) >= 0) {
offset += numRead;
}
// Ensure all the bytes have been read in
if (offset < bytes.length) {
throw new IOException("Could not completely read file "+file.getName());
}
// Close the input stream and return bytes
is.close();
return bytes;
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) throws Exception {
File f = new File("c:\\jstock.exe");
byte[] bs = getBytesFromFile(f);
List<Byte> list = new ArrayList<Byte>();
for (byte b : bs) {
if (b >= 0) {
// Printable ASCII code.
list.add(b);
}
}
byte[] output = new byte[list.size()];
for (int i = 0, size = list.size(); i < size; i++) {
output[i] = list.get(i);
}
System.out.println(new String(output));
}
}