为了使用fileoutputstream将数据字符串写入文件,我们将字符串转换为字节数组。对于使用fileinputstream读取数据字符串,我们不能使用convertion。 这是什么原因?
读数:
class Test {
public static void main(String args[]) {
try {
Fileinputstream fin = new Fileinputstream("abc.txt");
int i = 0;
while ((i = fin.read()) != -1) {
System.out.print((char) i);
}
fin.close();
} catch (Exception e) {
System.out.println(e);
}
}
}
写作:
class Test {
public static void main(String args[]) {
try {
FileOutputstream fout = new FileOutputStream("abc.txt");
String s = "Sachin Tendulkar is my favourite player";
byte b[] = s.getBytes(); //converting string into byte array
fout.write(b);
fout.close();
System.out.println("success...");
} catch (Exception e) {
system.out.println(e);
}
}
}
答案 0 :(得分:-1)
FileInputStream
只读原始值,FileOutputStream
只写原始值(和那些原语的数组)。
String
有一个byte[]
的构造函数和一个获取其byte[]
数据的方法,这里没有差异...
String s = new String("The Data");
byte[] bytesToWrite = s.getBytes();
FileOutputStream fos = new FileOutputStream(file);
fos.write(bytesToWrite);
VS
FileInputStream fis = new FileInputStream(file);
byte[] bytesRead = new byte[8];
fis.read(bytesRead);
String s2 = new String(bytesRead);
编辑:此代码不安全,不是最佳做法,在任何情况下都不应使用。它只是展示了输入和输出流之间的对称性。事实上,如果您自己处理流,您可能需要考虑使用库来处理缓冲,为您读取正确的字节数等。我强烈推荐Apache Commons IOUtils项目用于此类工作......
答案 1 :(得分:-1)
你可以这样做:
读取所有字节并将其转换为单个字符串:
try ( FileInputStream fis = new FileInputStream("file.txt")) {
final byte[] buffer = new byte[1024];
int count;
ByteArrayOutputStream bos = new ByteArrayOutputStream();
while ((count = fis.read(buffer)) != -1) {
bos.write(buffer, 0, count);
}
return new String(bos.toByteArray());
}
将所有行读作字符串列表:
try (FileInputStream fis = new FileInputStream("file.txt");
InputStreamReader isr = new InputStreamReader(fis);
BufferedReader reader = new BufferedReader(isr)) {
List<String> lines = new ArrayList<>();
String line;
while ((line = reader.readLine()) != null) {
lines.add(line);
}
return lines;
}
可以在此处找到其他示例和一些最佳做法: How do I create a Java string from the contents of a file?