2013-05-28 2 views
0

Я долгое время занимался этим вопросом. Я хочу отправить файл с устройства A на устройство B. Я могу успешно послать файл B, когда я уже известно расширение файла («JPG») и просто записать его в моем коде следующим образомКак получить имя файла (включая расширение «.jpg» или «mp3») при отправке файла с устройства A в 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) вместо назначения имени файла и введите мой исходный код. Спасибо заранее!

+0

Я вижу в вашем коде 'f.getAbsolutePath();' возвращает полный путь с расширением. – MAC

+0

Привет, мой вопрос в том, что я хочу получить имя файла с устройства A, когда я передаю файл на устройство B и создаю файл с именем файла (включая расширение). Если расширение файла отсутствует, мой файл transferd может не сохраняется в правильной форме (ABC вместо ABC.jpg). Поэтому я не могу открыть файл ABC, что мне делать? Спасибо – dddog

ответ

0

Вам необходимо создать контракт между вашим клиентом сокета и сервером относительно разделителя между именем файла и содержимым. Например, вы можете отправить имя файла, за которым следует |, а затем содержимое файла. На стороне сервера вы читаете, пока не получите |, и это ваше имя файла. Затем прочитайте содержимое файла.

+0

Привет, Джон Б, можете ли вы рассказать мне, как добавить разделитель между именем и содержимым файла? Не могли бы вы привести мне пример? Благодаря! – dddog

+0

Я предполагаю, что у вас есть 'OutputStream' на стороне клиента. Делать. 'outputStream.write (. myFile.getName() GetBytes()); outputStream.write ("|" .getBytes()); outputStream.write (fileContents); ' –

 Смежные вопросы

  • Нет связанных вопросов^_^