2013-09-22 61 views
1

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

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

 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是字符的桥梁流到字节流: *向其写入的字符编码成使用指定的字节。

回答

4

我认为你有错误的想法写作字节/字符。字符只是字节数据的表示。这种表示方式取决于Character Encoding类型的基础。请看下面的代码:

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

如果你打开你的文件运行上面的代码后,你会注意到在文件中相同的字符串。你的文件总是有字节数据。字节由您的文本编辑器读取,并基于其默认字符编码进行编码,通常为UTF-8但并非总是如此。

0

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

你的要求似乎很奇怪,作为一个字符串转换为字节是你不希望使用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(); 
    } 
+0

OutputStreamWriter和InputStreamReader有什么用?我读这些类用作字符转换为字节的适配器 – HakunaMatata

+0

OutputStreamWriter用于使用特定的字符编码将字符写入流中。相同的InputStreamReader,但阅读... ObjectOutputStream(我上面使用)不关心编码,请参阅http://docs.oracle.com/javase/1.4.2/docs/api/java/io/DataOutput .html#writeByte(int)如何将字符转换为字节。您只需使用DataInput的子类读回使用DataOutput编写的字符。 – Renato