使用代码嵌入android.os.SystemProperties的方法(转)
http://www.eoeandroid.com/thread-206961-1-1.html
Android网络连接处理方法
http://www.eoeandroid.com/thread-206925-1-1.html
IReader书架效果的实现想法,唯一的问题是对美工的技能要...
http://www.eoeandroid.com/thread-206909-1-1.html
布局文件:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/fileName" /> <EditText android:layout_width="fill_parent" android:layout_height="wrap_content" android:id="@+id/edtFileName"/> <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/fileContent" /> <EditText android:layout_width="fill_parent" android:layout_height="wrap_content" android:id="@+id/edtFileContent" android:minLines="3"/> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/btnSave" android:text="@string/fileSave"/> </LinearLayout> <?xml version="1.0" encoding="utf-8"?> <resources> <string name="hello">Hello World, MainActivity!</string> <string name="app_name">文件操作</string> <string name="fileName">文件名称</string> <string name="fileContent">文件内容</string> <string name="fileSave">保存</string> <string name="success">保存完成</string> <string name="fail">保存失败</string> </resources>
package cn.itcast.files; import cn.itcast.service.FileService; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; public class MainActivity extends Activity implements OnClickListener{ private EditText edtFileName; private EditText edtFileContent; private Button btnSave; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); initView(); } private void initView(){ edtFileName = (EditText)this.findViewById(R.id.edtFileName); edtFileContent = (EditText)this.findViewById(R.id.edtFileContent); btnSave = (Button)this.findViewById(R.id.btnSave); btnSave.setOnClickListener(this); } @Override public void onClick(View v) { switch(v.getId()){ case R.id.btnSave: String fileName = edtFileName.getText().toString(); String fileContent = edtFileContent.getText().toString(); FileService service = new FileService(this); try { service.save(fileName, fileContent); Toast.makeText(getApplicationContext(), R.string.success, 1).show(); } catch (Exception e) { Toast.makeText(getApplicationContext(), R.string.fail, 1).show(); e.printStackTrace(); } break; default: break; } } }
package cn.itcast.service; import java.io.ByteArrayOutputStream; import java.io.FileInputStream; import java.io.FileOutputStream; import android.content.Context; public class FileService { private Context context; public FileService(Context context){ this.context = context; } /** * 保存文件 * @param fileName 文件名称 * @param fileContent 文件内容 */ public void save(String fileName, String fileContent) throws Exception{ //IO j2se //Context.MODE_PRIVATE --私有操作模式:创建出来的文件只能被本应用访问,其它应用无法访问该文件 //另外采用私有操作模式创建的文件,写入文件中的内容会覆盖原文件内容 //如果想把新写入的内容追加到原文件中,可以使用Context.MODE_APPEND FileOutputStream outStream = context.openFileOutput(fileName, Context.MODE_PRIVATE); outStream.write(fileContent.getBytes()); outStream.close(); } /** * 读取文件内容 * @param fileName 文件名称 * @return 文件内容 * @throws Exception */ public String read(String fileName) throws Exception{ FileInputStream inStream = context.openFileInput(fileName); ByteArrayOutputStream outStream = new ByteArrayOutputStream(); byte[] buffer = new byte[1024]; //防止数据量过大,超过了1024 int len = 0; while((len = inStream.read(buffer)) != -1){ //防止每次读取覆盖前一次数据 outStream.write(buffer, 0, len); } byte[] data = outStream.toByteArray(); return new String(data); } //Context.MODE_APPEND --模式会检查文件是否存在,存在就往文件追加内容,否则就创建新文件 //Context.MODE_WORLD_READABLE和Context.Context.MODE_WORLD_WRITEABLE用来控制其他应用是否有权限读写该文件 //MODE_WORLD_READABLE: 表示当前文件可以被其它应用读取 //MODE_WORLD_WRITEABLE: 表示当前文件可以被其它应用写入 //如果希望文件被其他应用读和写,可以传入: //openFileOutput("itcast.txt", Context.MODE_WORLD_READABLE + // Context.Context.MODE_WORLD_WRITEABLE); //android有一套自己的安全模式,当应用程序(.apk)在安装时系统就会分配给他一个userId //当该应用要去访问其它资源比如文件的时候,就需要userId匹配,默认情况下,任何应用创建的文件, //sharePerferences,数据库都应该是私有的(位于/data/data/<package name>/files), //其它程序无法访问,除非在创建时指定了Context.MODE_WORLD_READABLE或者 //Context.Context.MODE_WORLD_WRITEABLE,只有这样其它程序才能正确访问 }
单元测试:
package cn.itcast.test; import cn.itcast.service.FileService; import android.test.AndroidTestCase; import android.util.Log; public class FileServiceTest extends AndroidTestCase{ private static final String TAG = "FileServiceTest"; public void testRead() throws Throwable{ FileService service = new FileService(this.getContext()); String result = service.read("itcast.txt"); Log.i(TAG, result); } }