0

我正在开发一个在服务器和客户端之间传输文件的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"

4

1 回答 1

0

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

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

System.out.println(myFile.isFile());
于 2013-07-31T14:28:52.457 回答