2013-05-28 4 views
0

나는 오랜 시간 동안이 질문에 쑥쑥 댔다. 장치 A에서 장치 B로 파일을 보내려고합니다. 문제는 지금은 파일의 여러 종류를 가지고있다소켓을 통해 장치 A에서 B로 파일을 보내는 동안 파일 이름을 가져 오는 방법 (확장자 ".jpg"또는 "mp3"포함)

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; 
} 

을 다음과 같은 I 성공적으로 (". JPG")을 이미 파일의 확장자를 알고있는 경우 B로 파일을 전송하고 그냥 내 코드에서 쓸 수 있습니다 (예 : : ".jpg", ".mp3", ".txt") 파일 이름을 지정하는 대신 확장명 (예 : Bruno Mars-Lazy song.mp3)을 포함하여 각 파일의 형식을 구분하고 전체 파일 이름을 보내려면 어떻게해야합니까? 원래 코드를 입력하십시오. 미리 감사드립니다.

+0

당신의 코드에서 볼 수있는'f.getAbsolutePath();'는 확장을 포함한 전체 경로를 반환합니다. – MAC

+0

안녕 MAC, 내 질문은 내가 장치 B에서 파일을 전송하고 파일의 이름 (확장명을 포함)와 파일을 만들 때 장치 A에서 파일 이름을 얻고 싶습니다. 파일의 확장명이 없다면, 내 transferd 파일은 올바른 형식으로 저장되지 않았습니다 (ABC.jpg 대신 ABC). 따라서 ABC 파일을 열 수 없습니다. 감사합니다. – dddog

답변

0

소켓 클라이언트와 서버 사이에 파일 이름과 내용 사이의 구분 기호와 관련된 계약을 만들어야합니다. 예를 들어, 파일 이름 다음에 |을 보낸 다음 파일 내용을 보낼 수 있습니다. 서버 측에서는 |이 나올 때까지 읽고 이것이 파일 이름입니다. 그런 다음 파일의 내용을 읽으십시오.

+0

안녕하세요, B 님, 파일 이름과 내용 사이에 구분 기호를 추가하는 방법을 알려주시겠습니까? 몇 가지 예를 들어 주시겠습니까? 감사! – dddog

+0

클라이언트 측에서'OutputStream'을 가지고 있다고 가정합니다. 해야 할 것. 'outputStream.write (myFile.getName(). getBytes()); outputStream.write ("|".getBytes()); outputStream.write (fileContents);' –