메뉴 건너뛰기

?

단축키

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부분은 다음번에 수정해서 올리도록해야겠다


  1. 스토리보드 짜는 방법

  2. 탭 뷰에 탭 추가하기, 아이콘 넣기

  3. 푸쉬 알림 기능. GCM (Google Cloud Messaging) 사용하기 (3)

  4. 푸쉬 알림 기능. GCM (Google Cloud Messaging) 사용하기 (2)

  5. 푸쉬 알림 기능. GCM (Google Cloud Messaging) 사용하기 (1)

  6. No Image 16Jul
    by
    2015/07/16 Views 9934 

    네트워크 상태 변화 감지하기(BroadcastReceiver 사용)

  7. No Image 16Jul
    by
    2015/07/16 Views 6926 

    옵션 메뉴 동적으로 생성하기

  8. No Image 16Jul
    by
    2015/07/16 Views 13881 

    EditText의 글자 수 제한 걸기

  9. No Image 16Jul
    by
    2015/07/16 Views 6337 

    사용자 정의 팝업창 띄우기

  10. No Image 16Jul
    by
    2015/07/16 Views 6398 

    체크 박스(CheckBox)의 이미지 바꾸기

  11. No Image 16Jul
    by
    2015/07/16 Views 7114 

    이미지 버튼(ImageButton) 만들기

  12. No Image 16Jul
    by
    2015/07/16 Views 7658 

    이미지의 Orientation를 체크해서 이미지 회전하기

  13. No Image 16Jul
    by
    2015/07/16 Views 8055 

    화면 회전에 따른 애니메이션 효과 구현하기

  14. 화면 해상도에 관계없는 레이아웃(Layout) 만들기

  15. No Image 16Jul
    by
    2015/07/16 Views 6137 

    네트워크를 통해 받은 이미지를 파일로 저장하고, 크기 조절해서 불러오기

  16. No Image 16Jul
    by
    2015/07/16 Views 6767 

    특정 폴더에서 오래된 파일 삭제하기

  17. No Image 16Jul
    by
    2015/07/16 Views 6530 

    ScrollView의 활용

  18. ViewFlipper 사용하기

  19. URL을 이용해서 이미지 다운로드 하기 (멀티 쓰레드 이용)

  20. No Image 16Jul
    by
    2015/07/16 Views 7400 

    URL을 이용해서 이미지 다운로드 하기

Board Pagination Prev 1 ... 4 5 6 7 8 9 10 11 12 13 Next
/ 13

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

© k2s0o1d4e0s2i1g5n. All Rights Reserved