안드로이드 개발 질문/답변
(글 수 45,052)
try{
con.connect("서버", 21); //21번포트로 접속합니다.(FTP전용 포트)
if (con.login("아뒤","비번" )) //로그인 합니다.
{
con.enterLocalPassiveMode(); //패시브 모드를 선언합니다.
con.setFileType(con.BINARY_FILE_TYPE); //파일형식을 이진파일 형식으로 선언하여줍니다.
File fileDir=Environment.getExternalStorageDirectory();//SD카드를 이용합니다.
String fileName=file.getName(); //인텐트를 통해 넘겨받은 이름의 파일을 생성합니다.
File newFile =new File(fileDir,fileName); //파일을 SD카드에 넘겨받은 파일이름으로 생성하여줍니다.
newFile.createNewFile();
TestSize=newFile.length(); //현재파일의 사이즈를 측정합니다.
FileInputStream fis =new FileInputStream(newFile.getAbsolutePath());//파일인풋스트림형식으로 파일을 생성합니다.
InputStreamReader in =new InputStreamReader(fis);//인풋스트림리더를 통해 스트림을 읽을 in변수를 선언하여 파일인풋스트림을 읽어옵니다.
BufferedReader reader =new BufferedReader(in);//버퍼를읽는 reader 변수를 통해 버퍼형식으로 인풋스트림을 읽어옵니다.
String strLine =null;//String형식의 strLine을 생성하여줍니다.
StringBuffer sBuffer =new StringBuffer();//StringBuffer형식의 sBuffer를 생성하여줍니다.
while((strLine=reader.readLine())!=null){
sBuffer.append(strLine+"\n");
}
in.close(); //스트림리더를 닫습니다.
ByteArrayInputStream in1=new ByteArrayInputStream(sBuffer.toString().getBytes());
con.storeFile("/"+file.getName(), in1); //파일 업로드
con.connect("서버", 21); //21번포트로 접속합니다.(FTP전용 포트)
if (con.login("아뒤","비번" )) //로그인 합니다.
{
con.enterLocalPassiveMode(); //패시브 모드를 선언합니다.
con.setFileType(con.BINARY_FILE_TYPE); //파일형식을 이진파일 형식으로 선언하여줍니다.
File fileDir=Environment.getExternalStorageDirectory();//SD카드를 이용합니다.
String fileName=file.getName(); //인텐트를 통해 넘겨받은 이름의 파일을 생성합니다.
File newFile =new File(fileDir,fileName); //파일을 SD카드에 넘겨받은 파일이름으로 생성하여줍니다.
newFile.createNewFile();
TestSize=newFile.length(); //현재파일의 사이즈를 측정합니다.
FileInputStream fis =new FileInputStream(newFile.getAbsolutePath());//파일인풋스트림형식으로 파일을 생성합니다.
InputStreamReader in =new InputStreamReader(fis);//인풋스트림리더를 통해 스트림을 읽을 in변수를 선언하여 파일인풋스트림을 읽어옵니다.
BufferedReader reader =new BufferedReader(in);//버퍼를읽는 reader 변수를 통해 버퍼형식으로 인풋스트림을 읽어옵니다.
String strLine =null;//String형식의 strLine을 생성하여줍니다.
StringBuffer sBuffer =new StringBuffer();//StringBuffer형식의 sBuffer를 생성하여줍니다.
while((strLine=reader.readLine())!=null){
sBuffer.append(strLine+"\n");
}
in.close(); //스트림리더를 닫습니다.
ByteArrayInputStream in1=new ByteArrayInputStream(sBuffer.toString().getBytes());
con.storeFile("/"+file.getName(), in1); //파일 업로드
빨간 부분의 내용은 기존의 SD카드에 저장되어있던 파일의 정보를 SBuffer 형식으로 변환하여 저장해주는
값입니다만, 굉장히 신기하게도 대부분의 파일의 경우 기존 파일 용량과는 다르게 저장되어집니다.
가령 1MByte의 파일을 위 형식으로 변환할 경우 SBuffer에 저장되는 크기는 2MByte가 되어버리고,
또 어떤 파일에 대해서는 그대로의 크기를 유지합니다.
현재 SD카드에 저장되어있는 파일을 FTP 서버에 업로드 하는 어플개발중인데,
이런 부분에서 막혀버립니다.
실제 업로드는 구현이 되는데, 막상 FTP 서버상에 올라온 파일의 크기를 비교하여 보면 난감하더군요 -_-;;
이 어찌된 영문인지.. 여기 계신분들은 고수분들이 많으시니 꼭 해결해주시라 믿습니닷!!




FTP타입은 바이너리로 하셨는데.. BufferedReader 를 쓰니.. 아스키로 읽어들일것 같네요. 그러니..사이즈가 달라지는듯..
BufferedinputStream 을 사용해서 byte[] 형태로 읽어야 할듯한데요..
저장할때도.. 코드처럼 String 을 저장하는것이 아니라, 읽어들인 byte[] 를 바로 저장해야 하겠지요.