问大家一个很菜鸟的java问题,初学的,谢谢哈!

为什么我觉得OutputStream中的两个构造方法:1.FileOutputStream(Filefile)2.FileOutputStream(Stringname)... 为什么我觉得OutputStream中的两个构造方法:
1.FileOutputStream(File file)
2.FileOutputStream(String name)
都是一样的,可以通俗的说说么?谢谢
是不是第二种构造方法没有设置目录?好像也不是哈。
展开
 我来答
帐号已注销
2012-08-16 · TA获得超过4630个赞
知道大有可为答主
回答量:1345
采纳率:50%
帮助的人:1627万
展开全部
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);
}
}
追问
对的?我是按照字面去理解,刚刚没有看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的例子太多了。
百度网友5e2b30a42
2012-08-16 · TA获得超过643个赞
知道小有建树答主
回答量:463
采纳率:0%
帮助的人:335万
展开全部
这个叫方法重载。 为了调用方便,而使用不同方法(构造)参数。

具体你可以查看他的源码。

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

他的作用本身就是为了使用方便。 看你怎么使用方便, 就可以用哪种构造。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
dngoryaner
2012-08-16 · TA获得超过2350个赞
知道小有建树答主
回答量:2404
采纳率:0%
帮助的人:1129万
展开全部
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 方法拒绝对文件进行写入访问。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
papercut999
2012-08-16 · TA获得超过1786个赞
知道小有建树答主
回答量:1644
采纳率:0%
帮助的人:1099万
展开全部
方法名相同,传入的参数不同,这个是面向对象里面的重载

也就是说,你要输出一个文件流,可以使用定义一个文件的方式,也可以指定这个文件具体的路径的方式来实现
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
haozi0oo0
2012-08-16 · 超过18用户采纳过TA的回答
知道答主
回答量:46
采纳率:0%
帮助的人:41.7万
展开全部
不一样 因为定义的参数类型不一样 第一个是 File 类型的 第二个是 String类型的
而String 是字符型 File是你自己定义的一个类
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(5)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式