A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

  1. static class MyServerThread implements Runnable
  2.         {
  3.                 //它有两个成员变量,一个是请求服务的客户端socket.另一个是用于统计上传文件数量的计数器.同时也
  4.                 //用于生成文件名
  5.                 private Socket socket;
  6.                 private long fileNumber;
  7.                
  8.                 private MyServerThread(Socket socket ,long fileNumber)
  9.                 {
  10.                         this.fileNumber =fileNumber;
  11.                         this.socket = socket;
  12.                 }

  13.                 @Override
  14.                 public void run()
  15.                 {        
  16.                         //得到客户端的IP地址.
  17.                         String id = socket.getInetAddress().getHostAddress();
  18.                         System.out.println(id+"...connected");
  19.                         //创建三个流对象,其中out,in,分别表示客户端的输入输出流,feedbackOut用于给客户端发送反馈信息,
  20.                         OutputStream out=null;
  21.                         InputStream in=null;
  22.                         OutputStream feedbackOut=null;
  23.                         try
  24.                         {
  25.                                 in = socket.getInputStream();
  26.                                 feedbackOut = socket.getOutputStream();        
  27.                         
  28.                                 int len;
  29.                                 byte[] b = new byte[1024];
  30.                                 //接收上传文件的类型信息.
  31.                                 len = in.read(b);
  32.                                 String fileType = new String(b,0,len);
  33.                                 //创建相应的文件并与out相关联.
  34.                                 File file = new File(System.getProperty("user.dir")+"\\file"+fileNumber+fileType);
  35.                                 file.createNewFile();        
  36.                                 out = new FileOutputStream(file);
  37.                                 //接收上上传的文件的内容信息.
  38.                                 while((len=in.read(b,0,b.length))!=-1)
  39.                                 {
  40.                                         out.write(b,0,len);
  41.                                 }
  42.                                 //发送反馈信息
  43.                                 feedbackOut.write("上传成功".getBytes());
  44.                                 
  45.                                 
  46.                         }
  47.                         catch(IOException e)
  48.                         {
  49.                                 e.printStackTrace();
  50.                                 
  51.                                 try {
  52.                                         feedbackOut.write("上传失败".getBytes());
  53.                                 } catch (IOException e1) {
  54.                                        
  55.                                         e1.printStackTrace();
  56.                                 }
  57.                         }
  58.                         finally//关闭流
  59.                         {
  60.                                 
  61.                                         try {
  62.                                                 if(out!=null)
  63.                                                         out.close();
  64.                                                 if(in!=null)
  65.                                                         in.close();
  66.                                                 if(feedbackOut!=null)
  67.                                                         feedbackOut.close();
  68.                                         } catch (IOException e) {
  69.                                                 // TODO Auto-generated catch block
  70.                                                 e.printStackTrace();
  71.                                         }
  72.                         }
  73.                 }
  74.                

  75.         }
复制代码


下面是问题的描述:
        我这段代码是写的一个服务器的线程生成器,在服务器中当有客户端连接进来,就new 一个这个对象生成一个服务线程,可是在这里面有一个地方把我给搞晕了.

  1. //创建相应的文件并与out相关联.
  2. File file = new File(System.getProperty("user.dir")+"\\file"+fileNumber+fileType);
  3. file.createNewFile();   
复制代码

  1. 这一段代码报错,我另外开了一个文件,编译运行又是可以的,但是在这个程序里却是出现:
  2. java.io.IOException: 文件名、目录名或卷标语法不正确。
  3.         at java.io.WinNTFileSystem.createFileExclusively(Native Method)
  4.         at java.io.File.createNewFile(Unknown Source)
  5.         at com.itheima.Text9$MyServerThread.run(Text9.java:61)
  6.         at java.lang.Thread.run(Unknown Source)
复制代码


请教一下这个createNewFile方法,是什么情况?难道是因为多线程的原因?还望知道的大大们指点一下,谢谢了.

评分

参与人数 1技术分 +1 收起 理由
菜小徐 + 1

查看全部评分

3 个回复

倒序浏览
我比你更小白!但是我感觉你有个明显的错误!
首先服务端ServerSocket应该接收一个socket对象。即 ServerSocket ss=new ServerSocket();
Socket socket = ss.accept();
此时,OutputStream和InputStream 都是相对于对象而言的。 即客户端的的OutputStream是服务端的InputStream,貌似这个你搞混了!这里没有主函数。看看你的主函数传递给这个服务端构造方法的参数列表中的Socket是否是ss.accept();

评分

参与人数 1技术分 +1 收起 理由
枫儿 + 1 赞一个!

查看全部评分

回复 使用道具 举报
能不能别只给一半的代码,帮你测试一下都测试不了,从你目前的代码我发现了一个问题,就是楼上说的
回复 使用道具 举报
是不是fileNumber传的不对,导致多个线程同时写同一个文件?
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马