메뉴 건너뛰기

?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

친구들끼리 사용하기위해서 파싱과 ftp를이용해서 여러데이터를 주고받으려한다. 물론 보안면에서 많이 취약 하고 좋지 않지만 그냥 개인적으로 쓰기에는 괜찬은거같다. 그래서 파싱과 여러가지 ftp 를 사용 하여 이용하고있다. 저번에 파싱한것과 ftp이용한것을 토대로 사용한다.

혹시나 나중에다시 쓸일이있을까 포스팅한다. 파일스트림에대해서도 많이 알게되서 기분좋다.

가장 고생한부분은 역시나 스트림부분이었느데 자꾸 데이터가 지워져서 올라가는걸보니,, 루트를 잘못지정해주고,, 스트림을 미리설정해버려서 그런것같다. 그러면

 

첫번째 지정한것은 MainActivity 측에서 실행하는 부분이다. 로직이 너무길어서 FTP와 연관된 부분만 포스팅한다.

//FTPService 는내가설정한 것이다. 여기서 데이터를 받아서 수정한다음 다시 업로딩한다!

//service는 일단 부르기만하면, 서버에서 데이터불러오고 내데이터에 저장하는 것까지 해놨다.

FTPService service=new FTPService("data.xml",latitude,longitude);

//여기서 좀고생했는데 OutputStreamWriter로하고 파일명지정해주니 잘되지않았다.다시스트림공부

//해서 왜잘안되는지 마스터해야지
FileOutputStream fos;

try{

//이부분은 Activity를 상속한클래스에서 밖에사용이안되어서 데이터를 다시쓰는것은 //MainActivity에서 할수 밖에없었다. 그래서 한꺼번에 처리하려고 했으나,

//FTPService가 Activity를상속하지않아서 외부 MainActivity 에서 처리했다.

fos=openFileOutput("data.xml",MODE_PRIVATE);

//즉각적으로 Bytes해서 바로 써주면된다.그러면 이제 나의 데이터가 수정이된다.

//service.getAddString()은FTPService에서 내가원하는자료로 수정한뒤 데이터이다.

fos.write(service.getAddString().getBytes());

fos.close();

//수정이다되었으면 ftp에 다시 수정한것을 올려준다.

service.uploadFile("data.xml");

}catch(IOException e){

e.printStackTrace();

}

여기까지가 메인에서 FTP를 처리해서 다시 업로드하는 과정이다. 다음번에는 그냥 FTPService 클래스안에서 한꺼번에 모두 처리할수 있도록 수정해봐야 겠다. 이거원 ...

 

그러면 FTPServicef를 한번가보도록 하자

 

import java.io.BufferedReader;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStream;

import java.io.InputStreamReader;

import java.io.OutputStreamWriter;

import java.util.ArrayList;

 

import org.apache.commons.net.ftp.FTP;

import org.apache.commons.net.ftp.FTPClient;

import org.apache.commons.net.ftp.FTPFile;

 

class FTPService{

private FTPClient mFtp;

private String DIR="나의 데이터안의 경로";

//나는 파일1개만수정할것이므로 가져오는데이터이름 로드하는데이터이름 수정하는 데이터이름이 모두 같다. 그래서 fileName을 하나만쓴다.

private String fileName;

//이것은 경로까지포함한 file이다.

private File sourceFile;

private String addString;

private Double lat;

private Double lng;

 

boolean FTPok=false;

 

public FTPService(String fileName,Double lat,Double lng){

this.lat=lat;

this.lng=lng;

this.filename=fileName;

sourceFile=new File(DIR+fileName);

//여기서 부터 실행한다. 일단접속과 파일가져오고,수정까지만하는 작업을한다.

//일단 접속

getFrilFromFTP();

//그다음에 데이터를 가져온다.

FTPGetFile();

try{

//이것이수정하는과정

addString=changeText();

}catch(IOException e){

e.prinStackTrace();

}

}

//이부분은 전부분과 같으니 주석생략 

public void getFileFromFTP(){

if(!FTPConnect("나의 호스트네임")){

return;

}

if(!FTPLogin("아이디","비번")){

FTPClose();

return;

}

}

public boolean FTPConnect(String host){

try{

mFtp=new FTPClient();

mFtp.connect("도메인",포트);

}catch(IOException e){

return false;

}

return true;

}

public boolean FTPLogin(String id,String pw){

try{

if(!mFtp.login(id,pw))

return false;

}catch(IOException e){

return false;

}

return true;

}

public boolean FTPClose(){

try{

mFtp.disconnect();

}catch(IOException e){

return false;

}

return true;

}

//파일 업로드하는 함수!!

public boolean uploadFile(String filename) throws IOException{

boolean flag=false;

InputStream input=null;

 

try{

//이부분에 통파일을 넣어서 올릴데이터를 스트림형태로 넣는다.

input=new FileInputStream(sourceFile);

}catch(FileNotFoundException e){

return flag;

}

try{

//먼저 경로바꾸자

mFtp.changeWorkingDirectory("서버의경로");

//파일타입도 설정해주자!!

mFtp.setFileType(FTP.BINARY_FILE_TYPE);

//이부분에서 계속 해맷는데 파일을 스토어할때는 파일은 통쨰로 넣는것이아니라 getName()으로 이름가져와서 이용해야한다. 이것때문에 고생 ㅜㅜ

if(mFtp.storeFile(sourceFile.getName(),input)){

flag=true;

}

}catch(IOException e){

return flag;

}

FTPok=true;

input.close();

return flag;

}

//ftp에서 파일을 가져오는 부분이다.

public boolean FTPGetFile(){

FileOutputStream os;

File f;

try{

mFtp.changeWorkingDirectory("디렉터리경로설정");

//일단 거기에있는파일들을 가져온다.

FTPFile files[]=mFtp.listFiles();

//모든파일가져오는 과정에서 fileName이있으면 그것을가져와 내꺼에저장한다.

for (int i=0;i<files.length;i++){

if(files[i].getName().equals(fileName)){

//내가 저장할 폴더의 루트로 파일가져올것이다.

f=new File(DIR+files[i].getName());

//값을 써준다.

os=new FileOutputStream(f);

//이것이 핵심적으로 파일을 다운로드하는 로직

mFtp.retrieveFile(files[i].getName(),os);

os.close();

}

}

}catch(IOExcpetion e){

return false;

}

return true;

}

//이부분은 다운로드한 파일에 나의 로직까지 더해서 수정하는 부분이다. 

public String changeText() throws IOException {

BufferedReader br;

StringBuffer sb=new StringBuffer();

//일단 소스파일자체를 가져오도록하자!버퍼에 한줄한줄읽을것이다..

mainActivity면 new FileInputStream말구 openFileInput하면된다. 

br=new BufferedReader(new InputStreamReader(new FileInputStream(sourceFile)))

String str=null;

//중복 된 좌표가있을시 등록하지않는다.오차범위는 소수점4째짜리까지

boolean overlap=false;

//파싱해서 그데이터가 있는지 알아본다.내가만든 클래스로 이클래스는 원하는 데이터를 가져오는 기능을 하게 되어있다.

XMLPullPaser parse=new XMLPullParser();

ArrayList<LatLngInfo> info=new ArrayList<LatLngInfo>();

//거기에있는데이터를 인포에 저장하였다.

info=parse.getInfo();

//오차범위에서 중복 테스트 

for (int i=0;i<info.size();i++){

if((int)(lat*10000) == (int)(info.get(i).getLat()*10000) && 

(int)(lng*10000)==(int)(info.get(i).getLng()*10000)){

overlap=true;

}

}

 

//새로운 지점이면 등록한다. 

while(str=br.readLine())!=null){

if(str.equals("</item>")&&overlap==false){

sb.append("<lat>"+String.valueOf(lat)+"</lat>\n");

sb.append("<lng>"+String.valueOf(lng)+"</lng>\n");

sb.append("<name>이름까지넣어주기</name>\n");

}

sb.append(str+"\n");

}

//overlap은 다시초기화해준다.

overlap=false;

//고친상태에서 addString 으로 수정해서 다시올리기 

addString=sb.toString();

br.close();

return addString;

}

//외부에서 부를때 수정본을 반환한다.

public String getAddString(){

return addString;

}

//외부에서 잘연결됫는지 이것은 업로드까지되야 ok로바뀐다. 

public boolean FTPComplete(){

FTPok;

}

}

휴우,,,여기까지가 ftp에서 업로드하고 다운로드하는 과정이었다 .지금생각해보면 이상한데서 막혔네,, 다스트림 부분에서 많이막혔는데,, 스트림 다시한번이해해야겠다. 정말 쉽게 할수 있었는데,, 조금아쉽네,,, XMLPullPaser부분은 다음번에 수정해서 올리도록해야겠다


List of Articles
번호 제목 날짜 조회 수
117 안드로이드 종료 취소 다이얼로그 코드 2015.07.26 6389
116 폰갭 비콘 디텍팅 안될 때 (기본적인건 다 되있어야됨) 2015.07.26 6529
115 안드로이트 비콘 스캐닝시 고려 사항 2015.07.26 6658
114 블루투스 및 비콘 관련 정리 2015.07.26 10828
113 블루투스(Bluetooth) 통신에 대해 알아보자 file 2015.07.26 14047
112 안드로이드 팝업창 만들기(xml 내용 집어넣기) file 2015.07.23 9285
111 안드로이드 스튜디오 gradle error 해결 2015.07.23 6683
110 [안드로이드] 화면추가 버튼 리스너 file 2015.07.22 7681
109 [안드로이드] 페이스북 같은 슬라이드 메뉴 만들기 file 2015.07.21 8182
108 안드로이드 ( Android ) APK 파일 생성하기 file 2015.07.17 7309
107 안드로이드 webview (웹뷰) 개발 #4 - 멀티터치 ( 확대 / 축소 ) 적용 file 2015.07.17 7552
106 안드로이드 webview (웹뷰) 개발 #3 - 초기 로딩화면 (splash) 띄우기 + 아이콘 적용하기 file 2015.07.17 8697
105 안드로이드 webview (웹뷰) 개발 #2 - 파일 첨부 및 플러그인 적용하기 file 2015.07.17 8285
104 안드로이드 webview (웹뷰) 개발 #1 - 웹사이트를 어플로 만들어 보자! file 2015.07.17 8903
103 [안드로이드] 버튼 이벤트 처리하기 file 2015.07.17 7029
102 [안드로이드] 뷰(View)에 여백넣기 file 2015.07.17 7225
101 [안드로이드] 뷰(View)의 너비와 높이 지정하기 file 2015.07.17 7140
100 [안드로이드] 레이아웃의 기본2 file 2015.07.16 7071
99 [안드로이드] 레이아웃의 기본1 file 2015.07.16 6962
98 [안드로이드] Activity에 대해서 file 2015.07.16 6767
Board Pagination Prev 1 ... 3 4 5 6 7 8 9 10 11 12 13 Next
/ 13

하단 정보를 입력할 수 있습니다

© k2s0o1d4e0s2i1g5n. All Rights Reserved