- 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方法,是什么情况?难道是因为多线程的原因?还望知道的大大们指点一下,谢谢了. |