Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中的PrintWriter和FileOutputStream_Java_File Io_Fileoutputstream_Printwriter - Fatal编程技术网

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和源代码。