【问题标题】:File Write : String to Bytes文件写入:字符串到字节
【发布时间】:2013-09-27 08:09:53
【问题描述】:

我想将字符串/字符数据作为字节写入文件中。我希望这种转换发生在 IO.* 类内部。我不想在字符串上使用 getBytes() 方法。

我尝试了两个程序,但都将数据写入 Character 。当我在记事本中打开文件时,我可以读取这些字符。如何将我的数据存储为字节?

     import IO.FileWrite;

         import java.io.*;

        public class CharToChar {

private final String data;

public CharToChar(String data){
    this.data = data;
}

public static void main(String[] args) throws IOException {
    final CharToChar charToChar = new CharToChar("I am Manish");
    charToChar.write();
}

private void write() throws IOException {
    final File file = new File("CharToChar.txt");
    final FileWriter fileWriter = new FileWriter(file);
    final BufferedWriter bufferdWriter = new BufferedWriter(fileWriter);
    bufferdWriter.write(this.data);
    bufferdWriter.close();

}
  }


     import java.io.DataOutputStream;
     import java.io.FileOutputStream;
       import java.io.IOException;

       public class WriteStringAsBytesToFile {

public static void main(String[] args) {

    String strFilePath = "WriteStringAsBytes.txt";

    try
    {
        //create FileOutputStream object
        FileOutputStream fos = new FileOutputStream(strFilePath);

  /*
   * To create DataOutputStream object from FileOutputStream use,
   * DataOutputStream(OutputStream os) constructor.
   *
   */

        DataOutputStream dos = new DataOutputStream(fos);

        String str = "This string will be written to file as sequence of bytes!";

   /*
    * To write a string as a sequence of bytes to a file, use
    * void writeBytes(String str) method of Java DataOutputStream class.
    *
    * This method writes string as a sequence of bytes to underlying output
    * stream (Each character's high eight bits are discarded first).
    */

        dos.writeBytes(str);

    /*
     * To close DataOutputStream use,
     * void close() method.
     *
     */

        dos.close();

    }
    catch (IOException e)
    {
        System.out.println("IOException : " + e);
    }

}
   }

注意-> JAVA 文档说 输出流编写器 OutputStreamWriter 是从字符流到字节流的桥梁: * 写入它的字符使用指定的字节编码。

【问题讨论】:

    标签: java file file-io java-io


    【解决方案1】:

    不确定是否有任何 java IO 类可以做到这一点,我看到你不想使用getBytes(),但如果你决定采用getBytes() 方式,那么你可以修改你的write()在你的第一个例子中的方法是这样的:

    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.OutputStream;
    import java.util.Arrays;
    import java.util.Arrays;
    
    public class CharToChar {
    
        private final String data;
    
        public CharToChar(String data){
            this.data = data;
        }
    
        private void write() throws IOException {       
            OutputStream fos = new FileOutputStream(new File("CharToChar.txt"));
            fos.write(Arrays.toString(this.data.getBytes()).getBytes());
            fos.close();
        }
    
        public static void main(String[] args) throws IOException {
            final CharToChar charToChar = new CharToChar("I am Manish");
            charToChar.write();
        }
    }
    

    【讨论】:

      【解决方案2】:

      您的要求似乎很奇怪,因为将字符串转换为字节是您不想使用的 toBytes 方法的工作......但是您可以序列化任何 Java 对象,包括字符串,然后将其保存到一个文件如下:

          try ( ObjectOutputStream oos = new ObjectOutputStream(
                  new FileOutputStream( "CharToChar.txt" ) ) ) {
              // write any object to a file
              oos.writeObject( "I am Manish" );
              // another option, works for Strings and makes the String pretty much un-readable
              oos.writeBytes( "hello world" );
          } catch ( IOException e ) {
              e.printStackTrace();
          }
      

      【讨论】:

      • OutputStreamWriter 和 InputStreamReader 有什么用?我读到这些类被用作字符到字节的适配器
      • OutputStreamWriter 用于将字符写入流,使用某种字符编码。 InputStreamReader 相同,但用于读取... ObjectOutputStream(我在上面使用的)不关心编码,请参阅docs.oracle.com/javase/1.4.2/docs/api/java/io/… 了解如何将字符转换为字节。您只需使用 DataInput 的子类来读回使用 DataOutput 写入的字符。
      【解决方案3】:

      我认为您对写入字节/字符有错误的概念。字符,只是字节数据的表示。这种表示是根据Character Encoding 类型决定的。看下面的代码:

      OutputStream os = new FileOutputStream(filePath);
          os.write("This is byte date".getBytes("UTF-8"));
          os.close();
      

      如果您在运行上述 sn-p 后打开文件,您会注意到文件中有相同的字符串。您的文件始终包含以字节为单位的数据。字节由您的文本编辑器读取并根据其默认字符编码进行编码,通常是 UTF-8,但并非总是如此。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-09-04
        • 2011-10-24
        • 1970-01-01
        • 2016-09-09
        相关资源
        最近更新 更多