IO :http://www.cnblogs.com/hxsyl/p/3302852.html
getParentFile()的返回值是File型的。
而getParent() 的返回值是String型的。
mkdirs是File类里面的方法,
mounted:爬,增加,安装
String fileName="new .txt";
String dir="mydir1/mydir2";
File f=new File(dir,fileName);
当我直接
f.mkdirs();后
new .txt也变成了目录
而f.getParentFile().mkdirs();
只有mydir1/mydir2的目录
这个是为什么
首先,你不要被File给迷惑了,中文翻译是个文件的意思,但Java中它表示的是“文件和目录路径名的抽象表示形式”,也就是说File即可以是文件,也可以是目录路径名;
其次,File f=new File(dir,fileName); 这根据dir路径名字符串和fileName路径名字符串创建一个新 File实例,也就是说你认为fileName表示的是个文件, 而Java认为fileName可以是个文件和目录路径;
所以这样调用f.mkdirs(),就会创建f表示的路径名指定的目录(包括dir和fileName),因为你明确的要创建目录;
你在f.getParentFile().mkdirs()后,再f.createNewFile(),这样Java才知道你要创建一个fileName的文件;
f.mkdirs();是以f为基准建立也就是说 f目录前面的都应该是目录,包括他,以此类推:f.getParent().mkdirs()是以 f.getParent()为基准建立,包括f.getParent()(这里可以把f.getParent()看做是第一种情况中的 f )。就这样
f是个File对象,f.getParentFile()也是个File对象,同样调用mkdirs(),它们的行为不一样吗?
这与你这样创建File f=new File(dir,fileName),调用f.mkdirs();
和File parentPath=new File(dir);调用parentPath.mkdirs();
与你上面的是一样吗?
只说到这,自己再继续学习。
private static final String FILENAME = "mldn.txt" ; // 设置文件名称
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
super.setContentView(R.layout.main);
FileOutputStream output = null ; // 接收文件输出对象
try {
output = super.openFileOutput(FILENAME, Activity.MODE_PRIVATE) ;
} catch (FileNotFoundException e) {
e.printStackTrace();
}
PrintStream out = new PrintStream(output) ; // 输出方便
out.println("姓名:李兴华;") ;
out.println("年龄:30;") ;
out.println("地址:北京魔乐科技软件学院。") ;
out.close() ; // 资源一定要关闭
private static final String FILENAME = "mldn.txt" ; // 设置文件名称
private TextView msg = null ; // 文本组件
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
super.setContentView(R.layout.main);
this.msg = (TextView) super.findViewById(R.id.msg) ;
FileInputStream input = null ;
try {
input = super.openFileInput(FILENAME) ; // 取得输入流
} catch (FileNotFoundException e) {
e.printStackTrace();
}
Scanner scan = new Scanner(input) ;
while(scan.hasNext()) {
this.msg.append(scan.next() + "\n") ;
}
scan.close() ;
}
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
private static final String FILENAME = "/mnt/sdcard/mldndata/mymldn.txt" ; // 设置文件名称
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
super.setContentView(R.layout.main);
File file = new File(FILENAME) ; // 定义要操作的文件
if(!file.getParentFile().exists()) {
file.getParentFile().mkdirs() ; // 创建父文件夹路径
}
PrintStream out = null;
try {
out = new PrintStream(new FileOutputStream(file));
out.println("北京魔乐科技软件学院(MLDN,www.MLDNJAVA.cn),讲师:李兴华");
} catch (Exception e) {
e.printStackTrace() ;
} finally { // 一定要关闭流
if(out != null) {
out.close() ;
}
}
}
private static final String FILENAME = "mymldn.txt" ; // 设置文件名称
private static final String DIR = "mldndata" ; // 操作文件夹的名称
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
super.setContentView(R.layout.main);
if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
File file = new File(Environment.getExternalStorageDirectory()
+ File.separator + DIR + File.separator + FILENAME); // 定义要操作的文件
if (!file.getParentFile().exists()) {
file.getParentFile().mkdirs(); // 创建父文件夹路径
}
PrintStream out = null;
try {
out = new PrintStream(new FileOutputStream(file));
out.println("北京魔乐科技软件学院(MLDN,www.MLDNJAVA.cn),讲师:李兴华");
} catch (Exception e) {
e.printStackTrace();
} finally { // 一定要关闭流
if (out != null) {
out.close();
}
}
} else {
Toast.makeText(this, "保存失败,SD卡不存在!", Toast.LENGTH_LONG).show() ;
}
}
private static final String FILENAME = "mymldn.txt" ; // 设置文件名称
private static final String DIR = "mldndata" ; // 操作文件夹的名称
private TextView msg = null ;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
super.setContentView(R.layout.main);
this.msg = (TextView) super.findViewById(R.id.msg) ;
if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
File file = new File(Environment.getExternalStorageDirectory()
+ File.separator + DIR + File.separator + FILENAME); // 定义要操作的文件
if (!file.getParentFile().exists()) {
file.getParentFile().mkdirs(); // 创建父文件夹路径
}
Scanner scan = null ;
try {
scan = new Scanner(new FileInputStream(file)) ;
while(scan.hasNext()) {
this.msg.append(scan.next() + "\n") ;
}
} catch (Exception e) {
e.printStackTrace();
} finally { // 一定要关闭流
if (scan != null) {
scan.close();
}
}
} else {
Toast.makeText(this, "保存失败,SD卡不存在!", Toast.LENGTH_LONG).show() ;
}
}
private TextView msg = null ;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
super.setContentView(R.layout.main);
this.msg = (TextView) super.findViewById(R.id.msg) ;
Resources res = super.getResources() ; // 资源操作类
InputStream input = res.openRawResource(R.raw.mybook) ; // 为要读取的内容设置输入流
Scanner scan = new Scanner(input) ;
StringBuffer buf = new StringBuffer() ;
while (scan.hasNext()) {
buf.append(scan.next()).append("\n") ;
}
scan.close() ;
try {
input.close() ;
} catch (IOException e) {
e.printStackTrace();
}
this.msg.setText(buf) ;
}
1.在AndroidManifest.xml中加入访问SDCard的权限如下:
<!-- 在SDCard中创建与删除文件权限 -->
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
<!-- 往SDCard写入数据权限 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
要往SDCard存放 文件,程序必须先判断手机是否装有SDCard,并且可以进行读写。
注意:访问SDCard必须在AndroidManifest.xml中加入访问SDCard的权限
if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
File sdCardDir = Environment.getExternalStorageDirectory();//获取SDCard目录,2.2的时候为:/mnt/sdcart 2.1的时候为:/sdcard,所以使用静态方法得到路径会好一点。
File saveFile = new File(sdCardDir, "abc.txt");
FileOutputStream outStream = new FileOutputStream(saveFile);
outStream.write("你好".getBytes());
outStream.close();
}