我正在研究一个在服务器和客户端之间传输文件的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的“
答案 0 :(得分:0)
假设您正在目录“C:\”上执行程序,而您的文件“image.jpg”位于“C:\ images \ image.jpg”上。 如果您将输入提供为“image.jpg”,则无法使用。你必须提供“images \ image.jpg”。
您可以通过在服务器端代码中添加以下行来轻松检查是否已点击实际文件:
System.out.println(myFile.isFile());