在java文件io中向下转换和向上转换?

时间:2016-11-04 09:57:22

标签: java

为了使用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);
    }
  }
}

2 个答案:

答案 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?