Java中的PrintWriter和FileOutputStream
Java中的PrintWriter和FileOutputStream,java,file-io,fileoutputstream,printwriter,Java,File Io,Fileoutputstream,Printwriter,PrintWriter用于将数据作为文本写入文件,而FileOutputStream用于以二进制文件写入 考虑 import java.io.*; public class Main { public static void main(String[] args) throws Exception { PrintWriter pw = new PrintWriter(new File("data")); for(int i=1;i<=10;++i)
PrintWriter
用于将数据作为文本写入文件,而FileOutputStream
用于以二进制文件写入
考虑
import java.io.*;
public class Main {
public static void main(String[] args) throws Exception {
PrintWriter pw = new PrintWriter(new File("data"));
for(int i=1;i<=10;++i)
pw.print(i);
pw.close();
}
}
但是,如果我使用FileOutputStream
我会得到文本中不可读的二进制数据
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws Exception {
FileOutputStream fos = new FileOutputStream(new File("data")) ;
for(int i= 1; i<=10; ++i)
fos.write(i);
fos.close();
}
}
输出:
12345678910
12345678910
******编辑:**
现在考虑,案件
import java.io.*;
import java.util.*;
public class Main
{
public static void main(String[] args) throws Exception
{
PrintWriter pw = new PrintWriter( new DataOutputStream(new FileOutputStream(new File("data"))));
for(int i=1 ;i<=10;++i)
pw.print(i);
pw.close();
}
}
import java.io.*;
导入java.util.*;
公共班机
{
公共静态void main(字符串[]args)引发异常
{
PrintWriter pw=新的PrintWriter(新数据输出流(新文件输出流(新文件(“数据”)))));
对于(inti=1;i查看文档
发件人:
将指定的字节写入此文件输出流
发件人:
打印一个整数。string.valueOf(int)
生成的字符串根据平台的默认字符编码转换为字节,这些字节完全按照write(int)方法写入
也就是说,此方法将根据您看到的数字来编写数字。
另一个写字节。
字节值9不是数字9,而是无法读取的字符。查看文档
发件人:
将指定的字节写入此文件输出流
发件人:
打印一个整数。string.valueOf(int)
生成的字符串根据平台的默认字符编码转换为字节,这些字节完全按照write(int)方法写入
也就是说,此方法将根据您看到的数字来编写数字。
另一个写字节。
字节值9不是数字9,而是无法读取的字符。文件包含字节。始终
字符是通过使用编码将字符转换为字节写入文件的。存在许多这样的编码。例如,ASCII允许将128个不同的字符转换为字节。UTF-8允许将任何Unicode字符编码为字节。例如,这两种编码将字符“1”转换为字节49。“2”将被转换为插入字节50
当使用文件名作为参数的PrintWriter时,PrintWriter实际上会打开一个FileOutputStream向文件写入字节。当您向PrintWriter写入字符时,PrintWriter会使用编码将字符转换为字节,然后将这些字节写入FileOutputStream,后者会将字节写入文件
例如,如果您使用以下程序:
public class Main {
public static void main(String[] args) throws Exception {
FileOutputStream fos = new FileOutputStream(new File("data")) ;
for(int i = 49; i <= 58; ++i)
fos.write(i);
fos.close();
}
}
公共类主{
公共静态void main(字符串[]args)引发异常{
FileOutputStream fos=新的FileOutputStream(新文件(“数据”));
for(int i=49;i文件包含字节。始终
字符是通过使用编码将字符转换为字节写入文件的。存在许多这样的编码。例如,ASCII允许将128个不同的字符转换为字节。UTF-8允许将任何Unicode字符编码为字节。例如,这两种编码将字符“1”转换为字节49。“2”将被转换为插入字节50
当使用文件名作为参数的PrintWriter时,PrintWriter实际上会打开一个FileOutputStream向文件写入字节。当您向PrintWriter写入字符时,PrintWriter会使用编码将字符转换为字节,然后将这些字节写入FileOutputStream,后者会将字节写入文件
例如,如果您使用以下程序:
public class Main {
public static void main(String[] args) throws Exception {
FileOutputStream fos = new FileOutputStream(new File("data")) ;
for(int i = 49; i <= 58; ++i)
fos.write(i);
fos.close();
}
}
公共类主{
公共静态void main(字符串[]args)引发异常{
FileOutputStream fos=新的FileOutputStream(新文件(“数据”));
对于(int i=49;我也考虑了我的最新问题……我现在把它与DataOutputstreamAs Peter Lawrey联系起来,在他的评论中,DATAOUTPASSWATH是无用的。它接收字节并将它们写入文件FieldPutsFipe中。请考虑我的最新问题……我现在把它与DataOutputstreamAs Peter Law链接在一起。rey在他的评论中说,DataOutputStream是无用的。它接收字节并按原样将它们写入FileOutputStream。DataOutputStream在您的示例中是冗余的。它没有做任何有用的事情,这就是它工作的原因,但它令人困惑,如果您正在编写文本,您不应该使用它。是什么使DataOutputStream冗余?我无法解释获取它。如果取出DataOutputStream,它将执行完全相同的操作(速度稍微快一点)。因此它是多余的。但是DataOutputStream获取原语,将其转换为二进制,然后将其发送到FileOutputStream。这里,DataOutputStream获取编码字节。那么,这是如何解释的呢?PrintWriter调用DataOutputStream.write()
,它只是将字节写入底层文件OutputStream。请看javadoc和源代码。DataOutputStream在您的示例中是冗余的。它没有做任何有用的事情,这就是它工作的原因,但它令人困惑,如果您正在编写文本,您不应该使用它。是什么使DataOutputStream冗余?我无法获得它。如果您取出DataOutputStream,它会做完全相同的事情(速度稍微快一点)。因此它是多余的。但是DataOutputStream获取原语,将其转换为二进制,然后将其发送到FileOutputStream。这里,DataOutputStream获得编码字节。那么,这是如何解释的呢?PrintWriter调用DataOutputStream.write()
,它只是将字节写入底层的FileOutputStream。请查看javadoc和源代码。