求问:哪里出错??已经取得写入权限了。代码如下:
package com.beak.android.diarybook;import java.text.SimpleDateFormat;
import java.util.Date;import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;import com.beak.android.diarybook.output.FileUtils;public class DiaryBookActivity extends Activity {
EditText titleText = null;
EditText contentText = null;
TextView titleDate = null;
FileUtils fu = new FileUtils();
SimpleDateFormat YMD = new SimpleDateFormat("yyyy-MM-dd EEE");
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
titleText = (EditText)findViewById(R.id.title);
contentText = (EditText)findViewById(R.id.content);
titleDate = (TextView)findViewById(R.id.titleDate);
contentText.setLines(25);
contentText.setTextSize(15);
titleText.setText(R.string.secondtitle);
titleText.setTextSize(1, 15);
titleDate.setText(YMD.format(new Date()));
} public boolean onCreateOptionsMenu(Menu menu) {
menu.add(0, 1, 1, R.string.write);
menu.add(0, 2, 2, R.string.save);
menu.add(0, 3, 3, R.string.open);
menu.add(0, 4, 4, R.string.self);
menu.add(0, 5, 5, R.string.exit);
return super.onCreateOptionsMenu(menu);
} public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case 1: Toast.makeText(DiaryBookActivity.this, R.string.writetoast, Toast.LENGTH_LONG).show();break;
case 2: fu.write2SDcard(fu.getSDPATH(), titleDate.getText().toString(), contentText.getText().toString());
System.out.println("saved????");
Toast.makeText(DiaryBookActivity.this, R.string.savetoase, Toast.LENGTH_SHORT).show();break;
case 3: Toast.makeText(DiaryBookActivity.this, R.string.opentoast, Toast.LENGTH_SHORT).show();break;
case 4: System.out.println("self-control");Log.d("debug", "see it?");break;
case 5: finish();
}
return super.onOptionsItemSelected(item);
}
}通过输出System.out.println("saved???");发现,那句话应该执行了,但是在存储卡位置就是没有文件,应该是那句话有问题。这个是我改造别人写的类:
package com.beak.android.diarybook.output;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.io.OutputStream;import java.io.OutputStreamWriter;import android.os.Environment;public class FileUtils { private String SDPATH; public String getSDPATH() { return SDPATH; } public FileUtils() { SDPATH = Environment.getExternalStorageDirectory() + "/"; } public File creatSDFile(String fileName) throws IOException { File file = new File(SDPATH + fileName); file.createNewFile(); return file; } public File creatSDDir(String dirName) { File dir = new File(SDPATH + dirName); dir.mkdirs(); return dir; } public boolean isFileExist(String fileName){ File file = new File(SDPATH + fileName); return file.exists(); } public File write2SDcard(String path,String fileName,String content){ File file = null; OutputStream output = null; try{ creatSDDir(path); file = creatSDFile(path + fileName); output = new FileOutputStream(file); OutputStreamWriter osw = new OutputStreamWriter(output); osw.append(content); osw.flush(); osw.close(); } catch(Exception e){ e.printStackTrace(); } finally{ try{ output.close(); } catch(Exception e){ e.printStackTrace(); } } return file; }}
package com.beak.android.diarybook;import java.text.SimpleDateFormat;
import java.util.Date;import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;import com.beak.android.diarybook.output.FileUtils;public class DiaryBookActivity extends Activity {
EditText titleText = null;
EditText contentText = null;
TextView titleDate = null;
FileUtils fu = new FileUtils();
SimpleDateFormat YMD = new SimpleDateFormat("yyyy-MM-dd EEE");
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
titleText = (EditText)findViewById(R.id.title);
contentText = (EditText)findViewById(R.id.content);
titleDate = (TextView)findViewById(R.id.titleDate);
contentText.setLines(25);
contentText.setTextSize(15);
titleText.setText(R.string.secondtitle);
titleText.setTextSize(1, 15);
titleDate.setText(YMD.format(new Date()));
} public boolean onCreateOptionsMenu(Menu menu) {
menu.add(0, 1, 1, R.string.write);
menu.add(0, 2, 2, R.string.save);
menu.add(0, 3, 3, R.string.open);
menu.add(0, 4, 4, R.string.self);
menu.add(0, 5, 5, R.string.exit);
return super.onCreateOptionsMenu(menu);
} public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case 1: Toast.makeText(DiaryBookActivity.this, R.string.writetoast, Toast.LENGTH_LONG).show();break;
case 2: fu.write2SDcard(fu.getSDPATH(), titleDate.getText().toString(), contentText.getText().toString());
System.out.println("saved????");
Toast.makeText(DiaryBookActivity.this, R.string.savetoase, Toast.LENGTH_SHORT).show();break;
case 3: Toast.makeText(DiaryBookActivity.this, R.string.opentoast, Toast.LENGTH_SHORT).show();break;
case 4: System.out.println("self-control");Log.d("debug", "see it?");break;
case 5: finish();
}
return super.onOptionsItemSelected(item);
}
}通过输出System.out.println("saved???");发现,那句话应该执行了,但是在存储卡位置就是没有文件,应该是那句话有问题。这个是我改造别人写的类:
package com.beak.android.diarybook.output;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.io.OutputStream;import java.io.OutputStreamWriter;import android.os.Environment;public class FileUtils { private String SDPATH; public String getSDPATH() { return SDPATH; } public FileUtils() { SDPATH = Environment.getExternalStorageDirectory() + "/"; } public File creatSDFile(String fileName) throws IOException { File file = new File(SDPATH + fileName); file.createNewFile(); return file; } public File creatSDDir(String dirName) { File dir = new File(SDPATH + dirName); dir.mkdirs(); return dir; } public boolean isFileExist(String fileName){ File file = new File(SDPATH + fileName); return file.exists(); } public File write2SDcard(String path,String fileName,String content){ File file = null; OutputStream output = null; try{ creatSDDir(path); file = creatSDFile(path + fileName); output = new FileOutputStream(file); OutputStreamWriter osw = new OutputStreamWriter(output); osw.append(content); osw.flush(); osw.close(); } catch(Exception e){ e.printStackTrace(); } finally{ try{ output.close(); } catch(Exception e){ e.printStackTrace(); } } return file; }}
解决方案 »
- 新手开发android 遇到问题就解答!
- 为什么我下载别人的android代码运行却又错误,空指针
- 源码编译的sdk,无法向sdcard中push数据
- 客户端与服务器Http连接出现异常ConnectTimeoutException
- android平台的通话加密软件能实现吗?怎么实现?
- android游戏开发——Translate移动动画
- 关于android 图片适应不同屏幕的问题
- 请问一下关于购物车的问题,如何实现单击listview一行中的一个button,让同一行中的editview值加一
- Android初学者 弄了一天了 图片引用错误? 求解
- AS中导入RecyclerView-v7包
- 新人刚学Android,求XML中怎么引用自定义VIEW?
- 求助:Eclipse编译Android应用程序很不稳定,有没有办法?
1. fu.write2SDcard(fu.getSDPATH(), titleDate.getText().toString(), contentText.getText().toString());
观察到内部实现方式,你应该会创建这样一个目录:/mnt/sdcard//mnt/sdcard。因为你拿到SD卡的路径,同时以此为相对路径,作为 creatSDDir() 方法的参数。同时可能有“两根斜线”的问题
2. creatSDFile 实现方式最好为:
public File creatSDFile (String filename) { File dir = new File(SDPATH); return new File(dir, filename); }
3. 最后记得将output 关闭:
output.close();
4. SD卡上创建文件的权限是否已申请才疏学浅,找不到明显错误。但是我相信,尽量将代码规范化,可以避免大部分的错误。