我有一个.doc文件,包含在ÐÏ之前的标题,所以我需要删除在ÐÏ之前存在的所有字符。
示例:asdfasdfasdfasfasdfasfÐÏ9asjdfkj
我使用了以下代码。
InputStream is = new FileInputStream("D:\\Users\\Vinoth\\workspace\\Testing\\Testing_2.doc");
DataInputStream dis = new DataInputStream(is);
OutputStream os = new FileOutputStream("D:\\Users\\Vinoth\\workspace\\Testing\\Testing_3.doc");
DataOutputStream dos = new DataOutputStream(os);
byte[] buff = new byte[dis.available()];
dis.readFully(buff);
char temp = 0;
boolean start = false;
try{
for(byte b:buff){
char c = (char)b;
if(temp == 'Ð' && c == 'Ï' ){
start = true;
}
if(start){
dos.write(c);
}
temp = c;
}
但是,如果条件不满意,它不会在我的文件中写入任何内容作为第一个。请告知我该如何执行此操作。
答案 0 :(得分:1)
使用char c = (char)b;
请参阅byte-and-char-conversion-in-java
你会看到
Java中的一个字符是一个Unicode代码单元,被视为一个 无符号数。
以你的案例为例。字符'Ï'的字节二进制表示是11001111。 请参阅oracle tutorial,
byte:字节数据类型是8位有符号二进制补码整数。 它的最小值为-128,最大值为127(含)。
所以byte的值是-49。但是,对于Unicode使用,应将11001111解释为无符号字节,实际应为207。
int i = b & 0xff;
将获得二进制表示的无符号字节值。
您可以像下面一样修改代码。为了便于调试,我更改了文件路径和文件格式。我不确定 .doc 是否存在问题,但您的代码本身存在我实际提到的错误。
import java.io.*;
public class Test {
public static void main(String args[]){
InputStream is;
try {
is = new FileInputStream("Testing_2.txt");
DataInputStream dis = new DataInputStream(is);
OutputStream os = new FileOutputStream("Testing_3.txt");
DataOutputStream dos = new DataOutputStream(os);
byte[] buff = new byte[dis.available()];
dis.readFully(buff);
char temp = 0;
boolean start = false;
for(byte b:buff){
int i = b & 0xff;
char c = (char)i;
if(temp == 'Ð' && c == 'Ï' ){
start = true;
}
if(start){
dos.write(c);
}
temp = c;
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}