黑马程序员技术交流社区
标题:
请教一下这个createNewFile方法,是什么情况?
[打印本页]
作者:
heheka123
时间:
2014-4-1 18:26
标题:
请教一下这个createNewFile方法,是什么情况?
static class MyServerThread implements Runnable
{
//它有两个成员变量,一个是请求服务的客户端socket.另一个是用于统计上传文件数量的计数器.同时也
//用于生成文件名
private Socket socket;
private long fileNumber;
private MyServerThread(Socket socket ,long fileNumber)
{
this.fileNumber =fileNumber;
this.socket = socket;
}
@Override
public void run()
{
//得到客户端的IP地址.
String id = socket.getInetAddress().getHostAddress();
System.out.println(id+"...connected");
//创建三个流对象,其中out,in,分别表示客户端的输入输出流,feedbackOut用于给客户端发送反馈信息,
OutputStream out=null;
InputStream in=null;
OutputStream feedbackOut=null;
try
{
in = socket.getInputStream();
feedbackOut = socket.getOutputStream();
int len;
byte[] b = new byte[1024];
//接收上传文件的类型信息.
len = in.read(b);
String fileType = new String(b,0,len);
//创建相应的文件并与out相关联.
File file = new File(System.getProperty("user.dir")+"\\file"+fileNumber+fileType);
file.createNewFile();
out = new FileOutputStream(file);
//接收上上传的文件的内容信息.
while((len=in.read(b,0,b.length))!=-1)
{
out.write(b,0,len);
}
//发送反馈信息
feedbackOut.write("上传成功".getBytes());
}
catch(IOException e)
{
e.printStackTrace();
try {
feedbackOut.write("上传失败".getBytes());
} catch (IOException e1) {
e1.printStackTrace();
}
}
finally//关闭流
{
try {
if(out!=null)
out.close();
if(in!=null)
in.close();
if(feedbackOut!=null)
feedbackOut.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
复制代码
下面是问题的描述:
我这段代码是写的一个服务器的线程生成器,在服务器中当有客户端连接进来,就new 一个这个对象生成一个服务线程,可是在这里面有一个地方把我给搞晕了.
//创建相应的文件并与out相关联.
File file = new File(System.getProperty("user.dir")+"\\file"+fileNumber+fileType);
file.createNewFile();
复制代码
这一段代码报错,我另外开了一个文件,编译运行又是可以的,但是在这个程序里却是出现:
java.io.IOException: 文件名、目录名或卷标语法不正确。
at java.io.WinNTFileSystem.createFileExclusively(Native Method)
at java.io.File.createNewFile(Unknown Source)
at com.itheima.Text9$MyServerThread.run(Text9.java:61)
at java.lang.Thread.run(Unknown Source)
复制代码
请教一下这个createNewFile方法,是什么情况?难道是因为多线程的原因?还望知道的大大们指点一下,谢谢了.
作者:
清风有意
时间:
2014-4-1 18:58
我比你更小白!但是我感觉你有个明显的错误!
首先服务端ServerSocket应该接收一个socket对象。即 ServerSocket ss=new ServerSocket();
Socket socket = ss.accept();
此时,OutputStream和InputStream 都是相对于对象而言的。 即客户端的的OutputStream是服务端的InputStream,貌似这个你搞混了!这里没有主函数。看看你的主函数传递给这个服务端构造方法的参数列表中的Socket是否是ss.accept();
作者:
╰つ
时间:
2014-4-1 19:19
能不能别只给一半的代码,帮你测试一下都测试不了,从你目前的代码我发现了一个问题,就是楼上说的
作者:
leon_hm
时间:
2014-4-1 19:41
是不是fileNumber传的不对,导致多个线程同时写同一个文件?
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2