以下代码将char
存储到byte
时出现编译错误。如何将fin.read()
函数读取的字节存储到字节数组中并打印出来?
import java.io.FileInputStream;
class IO {
public static void main(String args[]) {
int i;
int j = 0;
FileInputStream fin = new FileInputStream("file.txt");
byte[] b = new byte[100];
do {
i = fin.read();
j++;
b[j] = (char) i;
} while (i != -1);
System.out.println(b);
}
}
输出:
possible loss of precision
found : char
required: byte
b[j] =(char) i;
^
1 error
如何让它发挥作用? 将文件读入字节数组,然后显示?
答案 0 :(得分:2)
答案 1 :(得分:1)
将以下行b[j] = (char) i;
更改为b[j] = (byte) i;
。
它会给你另一个编译器错误。但第一个问题将得到解决。
第一个不起作用,因为Java为char
类型使用Unicode,因此它有两个字节。您将int
值转换为char
,但之后尝试将其分配给byte
变量,为此您必须明确转换为byte
,这不是C也不再是C ++。
您还可以考虑使用更简单的方法fin.read(b)
,在您的情况下读取最多100
个字节,并在达到EOF时返回-1。这样您就不必将i
明确地投射到byte
。
例如:
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Arrays;
class IO {
public static void main(String args[]) {
byte[] b = new byte[100];
try (FileInputStream fin = new FileInputStream("file.txt");) {
while (true) {
int i = fin.read(b);
if (i < 0) {
break;
}
if (i < b.length) {
b = Arrays.copyOf(b, i);
}
System.out.println(Arrays.toString(b));
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
答案 2 :(得分:1)
读取文件并打印出来:
File file = new File("C:\\MyFile.txt");
FileInputStream fis = null;
BufferedInputStream bis = null;
DataInputStream dis = null;
try {
fis = new FileInputStream(file);
// Here BufferedInputStream is added for fast reading.
bis = new BufferedInputStream(fis);
dis = new DataInputStream(bis);
// dis.available() returns 0 if the file does not have more lines.
while (dis.available() != 0) {
// this statement reads the line from the file and print it to
// the console.
System.out.println(dis.readLine());
}
// dispose all the resources after using them, you need to move this to the finally block and check for null!!
fis.close();
bis.close();
dis.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
答案 3 :(得分:1)
尝试使用FileUtils.readFileToByteArray(file)
中的方法Apache Commons IO。它比手工编写代码更直接。
答案 4 :(得分:1)
对于您的问题,答案很简单。您正在将int转换为char,但您希望将其存储为byte。因此,您必须在对话期间将其转换为字节。即
import java.io.*;
class IO{
public static void main(String args[]){
int i;
int j=0;
FileInputStream fin = new FileInputStream("file.txt");
byte[] b = new byte[100];
do{
i= fin.read();
j++;
b[j] =(byte) i;
}while( i != -1);
System.out.println(b);
}
}
此外,您不需要将其作为int读取。直接读作char或byte。