Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在通过套接字从设备a向设备B发送文件时获取文件名(包括扩展名“jpg”或“mp3”)_Java_Android_File Transfer_Wifi Direct - Fatal编程技术网

Java 如何在通过套接字从设备a向设备B发送文件时获取文件名(包括扩展名“jpg”或“mp3”)

Java 如何在通过套接字从设备a向设备B发送文件时获取文件名(包括扩展名“jpg”或“mp3”),java,android,file-transfer,wifi-direct,Java,Android,File Transfer,Wifi Direct,我在这个问题上迟疑了很久。我想将文件从设备a发送到设备B。当我已经知道文件的扩展名(“.jpg”)时,我可以成功地将文件发送到B,并且只需在我的代码中编写它,如下所示 try { ServerSocket serverSocket = new ServerSocket(PORT); Log.d(WiFiDirectActivity.TAG, "Server: Socket opened"); Socket client = serverSocket.accept(); Log.d

我在这个问题上迟疑了很久。我想将文件从设备a发送到设备B。当我已经知道文件的扩展名(“.jpg”)时,我可以成功地将文件发送到B,并且只需在我的代码中编写它,如下所示

try {
  ServerSocket serverSocket = new ServerSocket(PORT);
  Log.d(WiFiDirectActivity.TAG, "Server: Socket opened");
  Socket client = serverSocket.accept();
  Log.d(WiFiDirectActivity.TAG, "Server: connection done");

  final File f = new File(Environment.getExternalStorageDirectory() + "/"    
                + context.getPackageName() +"/wifip2pshared-" 
                            + System.currentTimeMillis() +".jpg");

  File dirs = new File(f.getParent()); 
  if (!dirs.exists()) 
      dirs.mkdirs(); 
  f.createNewFile(); 

  Log.d(WiFiDirectActivity.TAG, "server: copying files " + f.toString());
  InputStream inputstream = client.getInputStream();
  copyFile(inputstream, new FileOutputStream(f));
  serverSocket.close();
  server_running = false;
  return f.getAbsolutePath();       
} 
catch (IOException e) {
  Log.e(WiFiDirectActivity.TAG, e.getMessage());
  return null;
}
问题是现在我有几种类型的文件(例如:“.jpg”、“.mp3”、“.txt”) 如何区分每个文件的类型并发送包含扩展名(例如:Bruno Mars Lazy song.mp3)的整个文件名,而不是在原始代码中指定文件名和类型。
提前谢谢

您需要在套接字客户端和服务器之间创建一个关于文件名和内容之间的分隔符的约定。例如,您可以发送文件名,后跟一个
|
,然后发送文件内容。在服务器端,您阅读直到获得
|
,这是您的文件名。然后读取文件的内容。

我可以在您的代码中看到
f.getAbsolutePath()返回扩展名为的完整路径。嘿,MAC,我的问题是,当我将文件传输到设备B时,我想从设备A获取文件名,并使用文件名(包括扩展名)创建文件。如果没有文件扩展名,我的传输文件无法以正确的格式保存(ABC而不是ABC.jpg)。因此我无法打开文件ABC我该怎么办?谢谢John B,你能告诉我如何在文件名和内容之间添加分隔符吗?你能给我举个例子吗?谢谢我假设您在客户端有一些
OutputStream
。做<代码>outputStream.write(myFile.getName().getBytes());outputStream.write(“|”。.getBytes());outputStream.write(文件内容)