簡體   English   中英

文件寫入:字符串到字節

[英]File Write : String to Bytes

我想將字符串/字符數據作為字節寫入文件中。我希望此轉換在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 OutputStreamWriter是從字符流到字節流的橋梁:*寫入字符的字符使用指定的字節編碼。

我認為您對於以字節/字符形式寫入有錯誤的觀念。 字符只是字節數據的表示。 該表示是根據字符編碼類型決定的。 看下面的代碼:

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

如果您在運行上述代碼段后打開文件,則會在文件中注意到相同的字符串。 您的文件始終包含字節數據。 這些字節由您的文本編輯器讀取,並根據其默認字符編碼(通常為UTF-8,但並非始終如此)進行編碼。

不知道是否有任何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();
    }
}

您的要求似乎很奇怪,因為您不希望使用toBytes方法的工作來將String轉換為字節,但是您可以序列化任何Java Object(包括Strings),然后將其保存到File中,如下所示:

    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();
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM