Міністерство освіти і науки України
Національний університет «Львівська політехніка»
Кафедра ЕОМ
/
Лабораторна робота №4
з предмету:
«Мережні операційні системи»
на тему:
«Організація роботи з файлами даних та зовнішньою пам’яттю в ОС Android»
Львів – 2017
Мета роботи: Оволодіти навичками програмування доступу та управління файлами даних в ОС Android.
Завдання: завдань
Програма доступу до текстового файлу даних , програма запису, зчитування та знищення текстового файлу даних з SD-картки.
Перерахування основних ресурсів Android
Тип ресурсу
Розміщення
опис
кольори
res / values / имя_файла
Ідентифікатор кольору, який вказує на колірний код. ID таких ресурсів виражаються в R.java якR.color. * . XML-вузол: / resources / color
рядки
res / values / имя_файла
Строкові ресурси. У їх число також входять рядки в форматі java і html. ID таких ресурсів виражаються в R.java як R.string. * . XML-вузол: resources / string. Можна використовувати додаткове форматування за допомогою стандартних html-тегів <b>, <i> і <u>. Методи, які будуть обробляти рядкові ресурси з HTML-форматуванням, повинні вміти обробляти ці теги.
Меню
/ Res / menu / имя_файла
Меню в додатку можна задати як XML-ресурси.
параметри
/ Res / values / имя_файла
Являє собою параметри або розміри різних елементів. Підтримує пікселі, дюйми, міліметри, які не залежать від щільності екрану пікселі (dip) і пікселі, які не залежать від масштабу. ID таких ресурсів виражаються в R.java як R.dimen. * . XML-вузол: resources / dimen
зображення
/ Res / drawable / ваші_файли
Ресурси-зображення. Підтримує формати JPG, GIF, PNG (самий кращий) і ін. Кожне зображення є окремим файлом і отримує власний ідентифікатор, який формується на ім'я файлу без розширення.Такі ID ресурсів представлені в файлі R.java як R.drawable. *. Система також підтримує так звані розтягуються зображення (stretchable image), в яких можна змінювати масштаб окремих елементів, а інші елементи залишати без змін.
отрісовиваємих кольору
/ Res / values / ваш_файл або / res / drawable / ваші_файли
Являє кольорові прямокутники, які використовуються в якості фону основних відмальовуємих об'єктів, наприклад точкових малюнків. Підтримка такої функції забезпечується тегом значення drawable, що знаходяться в підкаталозі значень. Такі id ресурсів виражаються в файлі R.java як R.drawable. *. ХМL-вузол для такого файлу: / resources / drawable. В Android за допомогою спеціальних ХМL-файлів, розташованих в / res / drawable, також підтримується округлені і градієнтні прямокутники. Кореневим ХМL-тегом для drawable є <shape>. Ідентифікатори таких ресурсів виражаються в файлі R.java як R.drawable. *. В такому випадку, кожне ім'я файлу перетвориться в унікальний id відмальовуємого об'єкта
анімація
/ Res / anim / ваш_файл
Android може виконати просту анімацію на графіку або на серії графічних зображень. Анімація включає обертання, поступова зміна, переміщення і протяг.
Довільні XML-файли
/res/xml/*.xml
В Android в якості ресурсів можуть використовуватися довільні XML-файли. Вони компілюються в aapt.Ідентифікатори таких ресурсів також виражаються в файлі R.java як R.xml. *
Довільні необроблені ресурси
/res/raw/*.*
Будь-які нескомпільовані виконавчі або текстові файли, наприклад, відео. Кожен файл отримує унікальний id ресурсу. Ідентифікатори таких ресурсів виражаються в файлі R.java як R.raw. *
Довільні необроблені активи
/assets/*.*/*.*
Можна використовувати довільні файли в довільно названих каталогах, які знаходяться в підкаталозі / assets. Це не ресурси, а просто необроблені файли. У цьому каталозі, на відміну від / res, підкаталоги можуть розташовуватися на будь-якій глибині. Для таких файлів не створюються ідентифікатори ресурсів. При роботі з ними потрібно використовувати відносне ім'я шляху, починаючи з / assets, але не показуючи цього каталогу в імені шляху
Лістинг програми
MainActivity.java
package com.example.bogdan.mos_guk_ki44_lab4;
import android.os.Environment;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
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.InputStreamReader;
public class MainActivity extends AppCompatActivity {
public EditText editText;
public TextView textView;
public Button save, load;
public String path = Environment.getExternalStorageDirectory().getAbsolutePath() + "/aaMosLab4";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
editText = (EditText) findViewById(R.id.editText);
textView = (TextView) findViewById(R.id.textView);
save = (Button) findViewById(R.id.save);
load = (Button) findViewById(R.id.load);
File dir = new File(path);
dir.mkdirs();
}
public void buttonSave (View view)
{
File file = new File (path + "/savedFile.txt");
String [] saveText = String.valueOf(editText.getText()).split(System.getProperty("line.separator"));
editText.setText("");
Toast.makeText(getApplicationContext(), "Saved", Toast.LENGTH_LONG).show();
Save (file, saveText);
}
public void buttonDelete (View view)
{
editText.setText("");
Toast.makeText(getApplicationContext(), "Deleted", Toast.LENGTH_LONG).show();
delete (path + "/savedFile.txt");
}
public static void delete(String path) {
File file = new File(path);
if (file.exists()) {
String deleteCmd = "rm -r " + path;
Runtime runtime = Runtime.getRuntime();
try {
runtime.exec(deleteCmd);
} catch (IOException e) {
}
}
}
public void buttonLoad (View view)
{
File file = new File (path + "/savedFile.txt");
if (file.exists()) {
String[] loadText = Load(file);
String finalString = "";
for (int i = 0; i < loadText.length; i++) {
finalString += loadText[i] + System.getProperty("line.separator");
}
textView.setText(finalString);
}else Toast.makeText(getApplicationContext(), "File not found", Toast.LENGTH_LONG).show();
}
public static String[] Load(File file)
{
FileInputStream fis = null;
try
{
fis = new FileInputStream(file);
}
catch (FileNotFoundException e) {e.printStackTrace();}
InputStreamReader isr = new InputStreamReader(fis);
BufferedReader br = new BufferedReader(isr);
String test;
int anzahl=0;
try
{
while ((test=br.readLine()) != null)
{
anzahl++;
}
}
catch (IOException e) {e.printStackTrace();}
try
{
fis.getChannel().position(0);
}
catch (IOException e) {e.printStackTrace();}
String[] array = new String[anzahl];
String line;
int i = 0;
try
{
while((line=br.readLine())!=null)
{
array[i] = line;
i++;
}
}
catch (IOException e) {e.printStackTrace();}
return array;
}
public static void Save(File file, String[] data)
{
FileOutputStream fos = null;
try
{
fos = new FileOutputStream(file);
}
catch (FileNotFoundException e) {e.printStackTrace();}
try
{
try
{
for (int i = 0; i<data.length; i++)
{
fos.write(data[i].getBytes());
if (i < data.length-1)
{
fos.write("\n".getBytes());
}
}
}
catch (IOException e) {e.printStackTrace();}
}
finally
{
try
{
fos.close();
}
catch (IOException e) {e.printStackTrace();}
}
}
}
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="com.example.bogdan.mos_guk_ki44_lab4.MainActivity">
<Button
android:text="Прочитати"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:id="@+id/load"
android:onClick="buttonLoad" />
<Button
android:text="Видалити"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/delete"
android:layout_alignParentTop="true"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"
android:onClick="buttonDelete" />
<Button
android:text="Записати"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/save"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:onClick="buttonSave" />
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:inputType="textPersonName"
android:ems="10"
android:layout_below="@+id/load"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_marginTop="24dp"
android:id="@+id/editText"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/editText"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_marginTop="16dp"
android:id="@+id/textView"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true" />
</RelativeLayout>
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.bogdan.mos_guk_ki44_lab4">
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
Результати роботи програми:
Рис.1
Рис.2
Висновок: На цій лабораторні роботі я отримав навички програмування доступу та управління файлами даних в ОС Android.