본문 바로가기
앱인벤터/앱인벤터 컴포넌트

앱인벤터 파일 컴포넌트

by flycoding 2022. 6. 5.
반응형

앱인벤터 파일 컴포넌트

 

앱인벤터의 컴포넌트들을 이해와 실제 예제를 통해 실습을 통해 모바일 앱 개발에 활용도를 높이고자 한다

앱인벤터 파일 컴포넌트는 보이지 않는 컴포넌트이며, 파일을 관리하며 저장하는 컴포넌트이다. 파일 컴포넌트는 스마트폰 디스크에 파일을 읽고 기록할 수 있다.

앱이 Companion에서 실행 중인지, 컴파일된 것인지, 앱인 어떤 안드로이드 버전인지에 따라 외부에 파일이 위치한 정확한 장소는 'Scope' 속성값에 저장이 된다.

안드로이드의 새로운 버전에서 앱은 특정한 디렉토리들에 저장되는 파일들을 요구하기 때문에, 'DefaultScope'는 앱에서 설정이 된다. 만일 개발자가 안드로이드의 옛날 버전을 사용하고 이전 스토리지를 접근한다면, 'DefaulScope' 속성값은 'Legacy'로 변경해야 한다. 또한 개발자는 'Scope'속성값을 블럭을 사용하여 변경할 수 있다.

아래에 scope 유형을 간략하게 기술하였다.:

  . App : 파일은 안드로이드 2.2 버진 이상에서는 앱에 특화된 저장위치에서 읽고 기록할 수 있다. 안드로이드의 2.2보다 이전 버전에서 파일은 legacy storage로 기록이 될 것이다.

  . Asset : 파일들은 app assets으로부터 읽을 수 있다. 파일들이 read-only 저장일 경우, app assets에 기록을 시도할 때 오류가 날 것이다.

  . Cache : 파일은 앱의 캐시 디렉토리에 읽고 기록할 수 있다. 캐시는 사용자에게 스토리지 공간을 얻기 위해 임시의 파일을 클리어하여 재생성할 수 있는 임이의 파일들에 유용하다.

  . Legacy : 파일들은 nb187 이전에 릴리즈한 앱인벤터 규칙을 사용하는 파일 시스템에 읽고 기록할 수 있다. 하나의 '/'로 시작하는 파일이름은 일례료 '/sdcard/'처럼 외부 저장 디렉토리의 루트로 읽고 기록될 수 있다. Legacy 기능은 안드로이드 11이후에는 동작하지 않을 것이다.

  . Private : 파일들은 앱의 private 디렉토리에 읽고 기록할 수 있다. 파일 관리 앱과 같은 다른 앱들에게 보이지 않는 정보를 저장하기 위해 scope를 사용하라.

 

Leacy 모드에서 파일 이름은 아래 3가지 형태를 가질 수 있다:

  . Private:  파일들은 /로 시작되지 않고 앱의 private 저장소에 기록된다.(예로, "file.txt")

  . External:  파일들은 하나의 /로 시작되고 public 저장소에 기록된다(예로, "/file.txt")

  . Shared: 파일들은 예로 Pictures와 같은 스마트폰의 공유되는 미디어 디렉토리에 읽고 기록할 수  있다.

 

모든 scopes 안에는, 두개의 슬래쉬(//)로 시작하는 파일 이름은 asses 이름으로 해석될 것이다.

 

파일 컴포넌트

팔레트의 소셜 부분에서 파일 컴포넌트는 보이지 않는 컴포넌트로, 뷰어에 drag&drop하면 화면에는 아무것도 표시되지 않는다. 본문에서 파일에 텍스트를 기록하는 간단한 파일 테스트 앱을 작성할 것이다.

 

팔레트

파일 컴포넌트는 '저장소'에 있다. 파일 컴포넌트를 오른쪽 뷰어에 Drag&Drop하면 추가된다.

 

뷰어

컴포넌트들을 추가했을 때, 기본적으로 사각형이 뷰어 화면에 출력된다.

뷰어에는 보이는 않는 컴포넌트로 파일 컴포넌트 1과 레이블 컴포넌트 2개, 텍스트박스 컴포넌트 2개, 버튼 컴포넌트 1개로 구성된다.

 

컴포넌트

 

파일 컴포넌트를 활용한 간단한 파일 앱에서 활용되는 컴포넌트는 아래와 같다. 

- 파일 컴포넌트

- 레이블 컴포넌트 : "Write Text", "Write name file"

- 텍스트박스 컴포넌트 2개 :

  - 텍스트 입력받는 텍스트박스

  - 파일이름을 입력받는 텍스트박스

- 버튼 컴포넌트 : 'Write'로 특정 파일에 특정 텍스트를 기록하기 위한 버튼으로 활용한다.

 

앱인벤터 파일 컴포넌트 파일앱 예제

 

파일 컴포넌트 속성값

파일 컴포넌트 속성값에는 DefaultScope, ReadPermission, WritePermission 속성값이 있다. 

DefaultScope 속성값은 파일 컴포넌트를 사용하여 접근된느 파일을 위한 default scope를 정의한다. App scope는 대부분의 앱에서 동작이 된다. legacy mode는 앱 파일 접근 시 안드로이드의 새로운 제약 조건보다 이전 버전의 앱에 사용할 수 있다.

  . DefaultScope에는 App, Asset, Cache, Legacy, Private, Shared값을 가질 수 있다.

  . App : 파일은 안드로이드 2.2 버진 이상에서는 앱에 특화된 저장위치에서 읽고 기록할 수 있다. 안드로이드의 2.2보다 이전 버전에서 파일은 legacy storage로 기록이 될 것이다.

  . Asset : 파일들은 app assets으로부터 읽을 수 있다. 파일들이 read-only 저장일 경우, app assets에 기록을 시도할 때 오류가 날 것이다.

  . Cache : 파일은 앱의 캐시 디렉토리에 읽고 기록할 수 있다. 캐시는 사용자에게 스토리지 공간을 얻기 위해 임시의 파일을 클리어하여 재생성할 수 있는 임이의 파일들에 유용하다.

  . Legacy : 파일들은 nb187 이전에 릴리즈한 앱인벤터 규칙을 사용하는 파일 시스템에 읽고 기록할 수 있다. 하나의 '/'로 시작하는 파일이름은 일례료 '/sdcard/'처럼 외부 저장 디렉토리의 루트로 읽고 기록될 수 있다. Legacy 기능은 안드로이드 11이후에는 동작하지 않을 것이다.

  . Private : 파일들은 앱의 private 디렉토리에 읽고 기록할 수 있다. 파일 관리 앱과 같은 다른 앱들에게 보이지 않는 정보를 저장하기 위해 scope를 사용하라.

 

ReadPermission 속성값은 앱에 특정 디렉토리의 파일 저장소의 읽기 접근이 가능한지를 설정하는 속성값이다.

WritePermission 속성값은 앱에 특정 디렉토리의 파일 저장소의 기록이 가능한지를 설정하는 속성값이다.

 

앱인벤터 파일 컴포넌트 속성값

 

파일 컴포넌트 이벤트 블럭들

파일 컴포넌트 이벤트 블럭은 파일저장후에, 텍스트를받았을때 이벤트 블럭 등이 있다.

 

. 파일 컴포넌트 파일저장후에 블럭

파일의 내용이 기록되었음을 알려주는 이벤트 블럭이다. 인자값으로 '파일이름'을 전달해준다.

 

앱인벤터 파일 컴포넌트 파일저장후 블럭

 

. 파일 컴포넌트 텍스트를받았을때 블럭

파일로부터 내용을 모두 읽었을 때 알려주는 이벤트 블럭이다. 인자값으로 파일로부터 읽은 '텍스트'를 반환해준다.

 

앱인벤터 파일 컴포넌트 텍스트를받았을때 블럭

 

파일 컴포넌트 호출 블럭들

파일 컴포넌트에 호출 블럭은 파일에덧붙이기, CopyFile, 삭제하기, Exists, IsDirectory, ListDirectory, MakeDirectory, MakeFullPath, MoveFile, 불러오기, RemoveDirectory, 파일저장하기 호출 블럭이 있다.

 

. 파일 컴포넌트 파일에덧붙이기 블럭

파일의 끝에 텍스트를 추가한다. 만일 파일이 존재하지 않으면 파일을 생성한다. '파일저장하기' 블럭 성공하였을 경우, '파일저장후에' 블럭이 실행이 될 것이다. 인자값으로 '텍스트'와 '파일이름'이 전달된다. 텍스트는 저장할 내용이며, 파일이름은 텍스트를 저장할 파일이름이다.

앱인벤터 파일 컴포넌트 파일에덧붙이기 블럭

 

. 파일 컴포넌트 CopyFile 블럭

'fromFileName'의 파일이름의 내용을 'toFileName'의 파일이름에 복사한다.

 

앱인벤터 파일 컴포넌트 CopyFile 블럭

 

. 파일 컴포넌트 삭제하기 블럭

저장소로부터 파일을 삭제한다.

 

앱인벤터 파일 컴포넌트 삭제하기 블럭

 

. 파일 컴포넌트 Exists 블럭

패스가 주어진 scope에 존재하는지 테스트한다. 존재하면 참값, 존재하지 않으면 거짓값을 반환한다.

 

앱인벤터 파일 컴포넌트 Exists 블럭

 

. 파일 컴포넌트 IsDirectory 블럭

주어진 scope내에 패스가 디렉토리인지 테스트한다. 존재하면 참값이며, 존재하지 않으면 거짓값을 반환한다.

 

앱인벤터 파일 컴포넌트 IsDirectory 블럭

 

. 파일 컴포넌트 ListDirectory 블럭

주어진 디렉토리 내에 파일과 디렉토리 이름의 리스트를 얻는다.

 

앱인벤터 파일 컴포넌트 ListDirectory 블럭

 

. 파일 컴포넌트 MakeDirectory 블럭

파일을 저장하기 위한 디렉토리를 만든다. 

 

앱인벤터 파일 컴포넌트 MakeDirectory 블럭

 

. 파일 컴포넌트 MakeFullPath 블럭

scope와 패스를 다른 컴포넌트를 위한 하나의 문자열로 변환한다.

 

앱인벤터 파일 컴포넌트 MakeFullPath 블럭

 

. 파일 컴포넌트 MoveFile 블럭

하나의 파일을 다른 위치로 옮기는 블럭이다.

 

앱인벤터 파일 컴포넌트 MoveFile 블럭

 

. 파일 컴포넌트 불러오기 블럭

저장소에 있는 파일로부터 텍스트를 읽어온다. /로 시작되는 '파일이름' (예로 /myFile.txt)은 SD 카드상의 특정 파일로부터 읽기 위한 것이다. 앱과 함께 패키된 assests을 읽기 위해서는 두개의 슬래시(//)로 시작하는 '파일이름'으로 시작한다. 만일 파일이름이 하나의 슬래시로 시작하지 않는다면 패키지된 앱의 private 저장소로부터 읽을 것이고, Companion에 대해서는 /sdcard/AppInventor/data로부터 읽을 것이다.

앱인벤터 파일 컴포넌트 불러오기 블럭

 

. 파일 컴포넌트 RemoveDirectory 블럭

파일시스템으로부터 디렉토리를 삭제한다. 만일 recursive가 참이면, 모든 것이 삭제된다. 만일 recursive가 거짓이면 단지 해당 디렉토리가 삭제된다.

 

앱인벤터 파일 컴포넌트 RemoveDirectory 블럭

 

. 파일 컴포넌트 파일저장하기 블럭

텍트스를 파일이름에 저장한다. 만일 슬래시(/)로 시작하는 파일이름이라면 파일은 sdcard(예로 /myFile.text)에 기록될 것이다. 만일 파일이름이 슬래시로 시작하지 않는다면 다른 프로그램이 접근하지 못하는 private 데이터 디렉토리에 기록될 것이다.

AI Companion을 위해서는 /sdcard/AppInventor/data에 파일들이 기록될 것이다.

만일 파일이 존재한다면 '파일저장하기' 블럭이 실행되면 파일은 덮어쓰기가 될 것이다. 만일 기존의 파일에 텍스트를 추가하고 싶다면 '파일에덧붙이기' 블럭을 사용하면 된다.

 

앱인벤터 파일 컴포넌트 파일저장하기 블럭

 

파일 컴포넌트 가져오기/지정하기 블럭들

파일 컴포넌트 중 가져오기/지정하기 블럭은 Scope 등의 블럭이 있다. 

 

. 파일 컴포넌트 Scope 블럭

ReadFrom과 SaveFile과 같은 동작을 위한 현재 scope를 설정하거나 가져오는 블럭이다.

 

앱인벤터 파일 컴포넌트 Scope 블럭

 

이상으로 앱인벤터 파일 컴포넌트 블럭에 대해 간략히 살펴보았다. 좀더 자세히 확인하기 싶으면, 파일을 활용한 간단한 파일 저장하는 앱을 블럭들을 하나씩 사용해보면서 블럭의 활용 용도 등을 파악하면 좋을 것 같다. 눈으로 보는 것보다 직접 해보는게 여러모로 코딩하는데 이해하고 코딩 실력이 향상되는데 도움이 된다.

 

Just Do it!!!

Just Drag&Drop!!!

 

MagneticFieldSenso

 

 

반응형

댓글