【问题标题】:java socket file transfer output pathjava socket文件传输输出路径
【发布时间】:2013-07-31 22:40:11
【问题描述】:

我正在开发一个在服务器和客户端之间传输文件的 java 项目,并且我已经设法将文件发送到所需的输出位置,但唯一的问题是我必须在输出路径中包含完整的文件名成功保存。我的程序是这样运行的:

首先它获取要传输的文件路径作为控制台的输入,然后获取输出路径,再次作为控制台的输入。

这里是对应的文件名导入和导出的代码(我觉得问题出在这里,贴这部分就够了)

服务器端

....
String in_filePath = null;
System.out.print("enter the file name: ");
in_filePath = sc.nextLine();
File myFile = new File( in_filePath );
System.out.println("The file chosen is being sent...");
byte[] mybytearray = new byte[(int) myFile.length()];
FileInputStream fis = null;

       try {
               fis = new FileInputStream(myFile);
               sc.close();
           } catch (FileNotFoundException ex) {
               ex.printStackTrace();
           }

客户端

.....
int bufferSize = clientSocket.getReceiveBufferSize();
is = clientSocket.getInputStream();
DataInputStream clientdata = new DataInputStream(is);
String fileName = clientdata.readUTF();
System.out.println("file to be transferred is: " + fileName );
System.out.print("file output path: ");
String out_filePath;
out_filePath = sc.nextLine();
File file = new File( out_filePath );
fos = new FileOutputStream( file );
bos = new BufferedOutputStream(fos);
bytesRead = is.read(aByte, 0, aByte.length);
     do {
            baos.write(aByte);
            bytesRead = is.read(aByte);
        } while (bytesRead != -1);
bos.write(baos.toByteArray());
System.out.println(fileName + " transferred successfully");

起初我没有在我的程序中包含输出路径;正如预期的那样,输出路径是根项目文件夹,它工作得很好,因为它正在读取文件名并发送具有相同名称的文件而没有问题。但是当我实现输出路径查询时,我选择的输出路径如“C:\”或“C:\blabla\”给了我上面所说的异常。此外,将输出路径设置为“C:\image.jpg”或“blablabla\image.jpg”效果很好(假设要复制为 image.jpg 的文件名)读取文件名是否有问题?任何帮助将不胜感激

编辑:如果我将“c:\”(或任何类似的路径)作为输出路径,现在我会收到一个套接字写入错误,但如果输出路径像“c”这样给出,它仍然可以正常工作:\image.jpg"

【问题讨论】:

  • 异常发生在哪一行?在服务器或客户端?标题表示输出路径,但摘要表明它可能在客户端中?
  • 我正在添加堆栈跟踪来查看它,但现在出现了一个不同的错误,如果我将输出路径指定为 c:\,则会在服务器端出现套接字写入错误,如果我给出完整文件名

标签: java sockets file-transfer


【解决方案1】:

假设您在目录“C:\”上执行程序,并且文件“image.jpg”位于“C:\images\image.jpg”上。 如果您将输入作为“image.jpg”提供,它将不起作用。您必须改为提供“images\image.jpg”。

您可以通过在服务器端代码中添加以下行来轻松检查您是否点击了实际文件:

System.out.println(myFile.isFile());

【讨论】:

  • 我不是在尝试直接在某个文件夹中搜索 image.jpg,而是将完整路径作为输入。问题不在输入部分,而是在输出部分,看起来
  • 您的意思是您要为服务器和客户端提供完整路径作为输入?对于服务器端,可以提供像“images\image.jpg”这样的相对路径,但客户端代码会期望没有子目录的相对路径(例如“image.jpg”)或完整路径(如“C:\images\image.jpg”)。
  • hm 我不知道客户会期望保存“image.jpg”,以为这是出乎意料的,实际上我对此了解不多,以为只显示了一些类似 c 的路径: \images\ 应该足够了(比如保存从互联网上下载的文件)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-08
  • 2011-10-05
  • 2021-11-25
  • 1970-01-01
相关资源
最近更新 更多