TCP-Sock 프로그램을 만들려고하는데 이는 간단한 파일 수신 프로그램입니다. 그리고 지금, 나는 약간 문제를 얻는다.android : FileOutputStream이 작동하지 않습니다.
내 클라이언트 프로그램의 FileOutputStream 클래스가 작동하지 않는다고 생각합니다.
아래 코드는 내가 작성한 것입니다.
package kr.ac.cbnu.incping.tcp_cloud;
public class DownActivity extends Activity {
public static int contentNum;
public static String body=new String();
public static String fName=new String();
public static int fSize;
public static synchronized String getFilePath(String userID, String fName)
{
String sdcard = Environment.getExternalStorageState();
File file = null;
if (!sdcard.equals(Environment.MEDIA_MOUNTED))
{
// SDcard isn't mount
file = Environment.getRootDirectory();
}
else
{
// SDcard is mount
file = Environment.getExternalStorageDirectory();
}
String dir = file.getAbsolutePath() + String.format("/tcp_cloud/%s",userID);
String path = file.getAbsolutePath() + String.format("/tcp_cloud/%s/%s",userID,fName);
file = new File(dir);
if (!file.exists())
{
// Make directory if dir doesn't exist
file.mkdirs();
}
// return File Path;
return path;
}
public void connect()
{
try{
Socket socket=new Socket(MainActivity.servIP, MainActivity.servPort);
DataOutputStream dos;
DataInputStream dis;
dis=new DataInputStream(socket.getInputStream());
dos=new DataOutputStream(socket.getOutputStream());
byte[]flag=new byte[3];
byte[]num=new byte[1];
byte[]uID=new byte[17];
String path=new String();
path=getFilePath(LoginActivity.usrName,fName);
File f=new File(path);
flag="05".getBytes("EUC_KR");
num=Integer.toHexString(contentNum).getBytes("EUC_KR");
uID=LoginActivity.usrName.getBytes("EUC_KR");
dos.write(flag);
dos.flush();
dos.write(num);
dos.flush();
dos.write(uID);
dos.flush();
FileOutputStream fos=new FileOutputStream(f);
Toast.makeText(getApplicationContext(),path,Toast.LENGTH_LONG).show();
BufferedOutputStream bos=new BufferedOutputStream(fos);
dos=new DataOutputStream(bos);
int len;
int size = 512;
byte[] data = new byte[size];
while ((len = dis.read(data,0,size))!=-1)
{
dos.write(data);
}
dos.flush();
Toast.makeText(getApplicationContext(),path+" saved",Toast.LENGTH_LONG).show();
dos.close();
bos.close();
fos.close();
dos.close();
dis.close();
socket.close();
}catch (Exception e){
e.printStackTrace();
}
}
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_down);
String title=new String();
if(contentNum==0)
title=LoginActivity.title1;
else if(contentNum==1)
title=LoginActivity.title2;
else if(contentNum==2)
title=LoginActivity.title3;
else if(contentNum==3)
title=LoginActivity.title4;
else if(contentNum==4)
title=LoginActivity.title5;
TextView bodytit=(TextView) findViewById(R.id.bodyTitle);
TextView bodydat=(TextView) findViewById(R.id.bodyBody);
Button filedat=(Button) findViewById(R.id.filename);
bodytit.setText(title);
bodydat.setText(body);
filedat.setText(fName+"(size: "+fSize+")");
filedat.setOnClickListener(new OnClickListener(){
public void onClick(View v){
connect();
}
});
}}
은이 코드는 토스트 메시지는 단지 메시지를 prob는있다
FileOutputStream fos=new FileOutputStream(f); Toast.makeText(getApplicationContext(),path,Toast.LENGTH_LONG).show(); BufferedOutputStream bos=new BufferedOutputStream(fos); dos=new DataOutputStream(bos);
문제가 코드를합니다. FOS의 위에 토스트를 놓았을 때, 잘 작동하는 건배. 토스트가 해당 위치에서 작동하지 않습니다.
이 문제를 해결할 수 없습니다. 제발, 누군가 도와주세요 .TT
* 나는 언어 분야의 사람들이다. 그래서 제 영어는 좋은 문장이 아닙니다. 죄송합니다;)
'토스트 (toast)'라는 메시지가 나타나나요? – alex
FOS 위에 놓으면 "/mnt/sdcard/tcp_cloud/rggf/000_IMG_0593.JPG" – user3079724
rggf = userID로 표시되며 해당 코드 (fos-taost-bos-)를 사용하면 아무 일도 일어나지 않습니다. 축배가 나타나지 않습니다 – user3079724