问大家一个很菜鸟的java问题,初学的,谢谢哈!
为什么我觉得OutputStream中的两个构造方法:1.FileOutputStream(Filefile)2.FileOutputStream(Stringname)...
为什么我觉得OutputStream中的两个构造方法:
1.FileOutputStream(File file)
2.FileOutputStream(String name)
都是一样的,可以通俗的说说么?谢谢
是不是第二种构造方法没有设置目录?好像也不是哈。 展开
1.FileOutputStream(File file)
2.FileOutputStream(String name)
都是一样的,可以通俗的说说么?谢谢
是不是第二种构造方法没有设置目录?好像也不是哈。 展开
7个回答
展开全部
Java源码:
public FileOutputStream(String name) throws FileNotFoundException {
this(name != null ? new File(name) : null, false);
}
public FileOutputStream(File file) throws FileNotFoundException {
this(file, false);
}
这是你想要的?参数为字符串的那个构造方法,第一步将字符串构造成了文件。所以,其实你是对的,它们是都一样的,如果你传的是文件路径,java会帮你把这个路径的文件给构造出来,而如果你自己构造了这个文件,那java就省事了,直接使用你给的文件。而它们最终都调用了另一个构造方法:
public FileOutputStream(File file, boolean append) throws FileNotFoundException
{
String name = (file != null ? file.getPath() : null);
SecurityManager security = System.getSecurityManager();
if (security != null) {
security.checkWrite(name);
}
if (name == null) {
throw new NullPointerException();
}
fd = new FileDescriptor();
this.append = append;
if (append) {
openAppend(name);
} else {
open(name);
}
}
public FileOutputStream(String name) throws FileNotFoundException {
this(name != null ? new File(name) : null, false);
}
public FileOutputStream(File file) throws FileNotFoundException {
this(file, false);
}
这是你想要的?参数为字符串的那个构造方法,第一步将字符串构造成了文件。所以,其实你是对的,它们是都一样的,如果你传的是文件路径,java会帮你把这个路径的文件给构造出来,而如果你自己构造了这个文件,那java就省事了,直接使用你给的文件。而它们最终都调用了另一个构造方法:
public FileOutputStream(File file, boolean append) throws FileNotFoundException
{
String name = (file != null ? file.getPath() : null);
SecurityManager security = System.getSecurityManager();
if (security != null) {
security.checkWrite(name);
}
if (name == null) {
throw new NullPointerException();
}
fd = new FileDescriptor();
this.append = append;
if (append) {
openAppend(name);
} else {
open(name);
}
}
追问
对的?我是按照字面去理解,刚刚没有看jdk里面的源码,看API,然后就
“FileOutputStream(File file)
创建一个向指定 File 对象表示的文件中写入数据的文件输出流。
FileOutputStream(String name)
创建一个向具有指定名称的文件中写入数据的输出文件流。”
这两句,不懂怎么去区别,觉得两个都应创建File对象的流(在API进去比较),
这里“”部分名词好抽象,可以稍微解释吗?通俗点
追答
FileOutputStream(File file)
创建一个向(指定 File 对象表示的)文件中写入数据的文件输出流。
FileOutputStream(String name)
创建一个向(具有指定名称的)文件中写入数据的输出文件输出流。
看到没,去掉括号里的定语,是不是两个东西就一样了?那么这两个构造函数的区别就在于定语中表达的意思:
指定File对象表示的文件
具有指定名称的文件
首先这个是对文件的输出操作,正常的想法是,参数应该是文件。第一个就比较容易理解,因为它的参数是文件,是这个输出流的目标文件。但第二个呢?第一眼看上去它是一个字符串,但实际呢,java帮你干了一件事,就是它把这个字符串变成了该字符串对应的文件。那么实际上,输出流的构造函数真正需要的参数确实的文件,而不是字符串。
首先你拿到一个字符串,你要怎么才能给它传一个文件参数?
File f = new File("filename");
new FileOutputStream(f);
这才是正常思路。但java是高级语言,高级语言就是要方便程序员。你传一个文件参数给FileOutputStream,是一个参数,你传构造文件也是一个参数,那java想让你轻松点,你把构造文件的参数直接给它,它可以帮你完成构造文件这个任务,就省得你构造来了。
传文件名和传一个文件对象的最终,都是传了一个文件对象,殊途同归而已。关于方法重载,java的例子太多了。
展开全部
这个叫方法重载。 为了调用方便,而使用不同方法(构造)参数。
具体你可以查看他的源码。
JDK 源码:
outputStream 参数构造
public PrintWriter(OutputStream out){
this(out,false);
}
String 参数构造:
public PrintWriter(String fileName) throws FileNotFoundException {
this( new BufferedWriter( new OutputStreamWriter( new FileOutputStream (fileName) )),false )
}
他的作用本身就是为了使用方便。 看你怎么使用方便, 就可以用哪种构造。
具体你可以查看他的源码。
JDK 源码:
outputStream 参数构造
public PrintWriter(OutputStream out){
this(out,false);
}
String 参数构造:
public PrintWriter(String fileName) throws FileNotFoundException {
this( new BufferedWriter( new OutputStreamWriter( new FileOutputStream (fileName) )),false )
}
他的作用本身就是为了使用方便。 看你怎么使用方便, 就可以用哪种构造。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
FileOutputStream(File file)
创建一个向指定 File 对象表示的文件中写入数据的文件输出流。
FileOutputStream(String name)
创建一个向具有指定名称的文件中写入数据的输出文件流。
public FileOutputStream(File file)
throws FileNotFoundException创建一个向指定 File 对象表示的文件中写入数据的文件输出流。创建一个新 FileDescriptor 对象来表示此文件连接。
首先,如果有安全管理器,则用 file 参数表示的路径作为参数来调用 checkWrite 方法。
如果该文件存在,但它是一个目录,而不是一个常规文件;或者该文件不存在,但无法创建它;抑或因为其他某些原因而无法打开,则抛出 FileNotFoundException。
参数:file - 为了进行写入而打开的文件。
抛出:FileNotFoundException - 如果该文件存在,但它是一个目录,而不是一个常规文件;或者该文件不存在,但无法创建它;抑或因为其他某些原因而无法打开
SecurityException - 如果存在安全管理器,且其 checkWrite 方法拒绝对文件进行写入访问。
public FileOutputStream(String name)
throws FileNotFoundException创建一个向具有指定名称的文件中写入数据的输出文件流。创建一个新 FileDescriptor 对象来表示此文件连接。
首先,如果有安全管理器,则用 name 作为参数调用 checkWrite 方法。
如果该文件存在,但它是一个目录,而不是一个常规文件;或者该文件不存在,但无法创建它;抑或因为其他某些原因而无法打开它,则抛出 FileNotFoundException。
参数:name - 与系统有关的文件名
抛出:FileNotFoundException - 如果文件存在,但它是一个目录,而不是一个常规文件;或者该文件不存在,但无法创建它;抑或因为其他某些原因而无法打开它
SecurityException - 如果存在安全管理器,且其 checkWrite 方法拒绝对文件进行写入访问。
创建一个向指定 File 对象表示的文件中写入数据的文件输出流。
FileOutputStream(String name)
创建一个向具有指定名称的文件中写入数据的输出文件流。
public FileOutputStream(File file)
throws FileNotFoundException创建一个向指定 File 对象表示的文件中写入数据的文件输出流。创建一个新 FileDescriptor 对象来表示此文件连接。
首先,如果有安全管理器,则用 file 参数表示的路径作为参数来调用 checkWrite 方法。
如果该文件存在,但它是一个目录,而不是一个常规文件;或者该文件不存在,但无法创建它;抑或因为其他某些原因而无法打开,则抛出 FileNotFoundException。
参数:file - 为了进行写入而打开的文件。
抛出:FileNotFoundException - 如果该文件存在,但它是一个目录,而不是一个常规文件;或者该文件不存在,但无法创建它;抑或因为其他某些原因而无法打开
SecurityException - 如果存在安全管理器,且其 checkWrite 方法拒绝对文件进行写入访问。
public FileOutputStream(String name)
throws FileNotFoundException创建一个向具有指定名称的文件中写入数据的输出文件流。创建一个新 FileDescriptor 对象来表示此文件连接。
首先,如果有安全管理器,则用 name 作为参数调用 checkWrite 方法。
如果该文件存在,但它是一个目录,而不是一个常规文件;或者该文件不存在,但无法创建它;抑或因为其他某些原因而无法打开它,则抛出 FileNotFoundException。
参数:name - 与系统有关的文件名
抛出:FileNotFoundException - 如果文件存在,但它是一个目录,而不是一个常规文件;或者该文件不存在,但无法创建它;抑或因为其他某些原因而无法打开它
SecurityException - 如果存在安全管理器,且其 checkWrite 方法拒绝对文件进行写入访问。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
方法名相同,传入的参数不同,这个是面向对象里面的重载
也就是说,你要输出一个文件流,可以使用定义一个文件的方式,也可以指定这个文件具体的路径的方式来实现
也就是说,你要输出一个文件流,可以使用定义一个文件的方式,也可以指定这个文件具体的路径的方式来实现
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
不一样 因为定义的参数类型不一样 第一个是 File 类型的 第二个是 String类型的
而String 是字符型 File是你自己定义的一个类
而String 是字符型 File是你自己定义的一个类
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询