Code Bye

已经折腾两天了,为什么我无法向手机里写文件??

我按照JAVA的方法、按照网上查询的方法、按照书上的方法,写了三个版本了!但都不行!已经折腾两天了!请问到底是怎么回事呢??!谢谢了!

(我没有SD卡,我是直接写在手机里的。我已经用Environment.getDataDirectory().toString();找到了路径,可即便往那个路径里写也不行。)

package com.example.fcafileio;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintStream;
import java.io.PrintWriter;
import java.util.Scanner;

import org.apache.http.util.EncodingUtils;

import android.os.Bundle;
import android.os.Environment;
import android.widget.TextView;
import android.app.Activity;
import android.content.Context;

public class FCAFILEIO extends Activity {
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_fcafileio);
		String PATH = Environment.getDataDirectory().toString();
		writefile3("fcafca.bin", "sadfasdfasd");
		// final TextView txtfca = (TextView) findViewById(R.id.fcatext);
	}

	private void writefile1(File filefca, String content) {
		try {
			PrintWriter outputfca = new PrintWriter(filefca);
			outputfca.print(content);
			outputfca.flush();
			outputfca.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	private void writefile2(File filefca, String content) {
		try {
			FileOutputStream outputfca = new FileOutputStream(filefca);
			byte[] bytes = content.getBytes();
			outputfca.write(bytes);
			outputfca.flush();
			outputfca.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	private void writefile3(String fileName, String message) {
		try {
			FileOutputStream fos = openFileOutput(fileName, MODE_APPEND);
			PrintStream ps = new PrintStream(fos);
			ps.println(message);
			fos.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}
writefile1
writefile2
writefile3
都是写文件的方法,可都不行!
/data这一级目录不能直接操作吧?

WRITE_EXTERNAL_STORAGE要是没记错,只能操作
sdcard
/data/data/你的<package_name>/files/

你的 写权限 加了没?
如果不是缓存文件,使用 
this.getFilesDir();

如果是缓存文件,使用

this.getCacheDir();

上面两个接口,
第一个得到的目录是 /data/data/你的<package_name>/files/
第二个得到的目录是 /data/data/你的<package_name>/cache
在android机身存储中 /data/data/你的<package_name>/ 这个目录对app而言是可写的。这个目录下面系统会建立几个目录放置db,sharepreference等文件,我们遵守android的规范,app运行需要的文件就放到files目录下 ,缓存文件放到cache中就可以了。

15分
权限加了吗?
     <uses-permission android:name=”android.permission.MOUNT_UNMOUNT_FILESYSTEMS”/>
     <uses-permission android:name=”android.permission.WRITE_EXTERNAL_STORAGE”/>
引用 5 楼 liudashao0 的回复:

权限加了吗?
     <uses-permission android:name=”android.permission.MOUNT_UNMOUNT_FILESYSTEMS”/>
     <uses-permission android:name=”android.permission.WRITE_EXTERNAL_STORAGE”/>

嗯,之前是没有加,但加了之后也还是不行啊。

引用 4 楼 yexianghu 的回复:

如果不是缓存文件,使用 

this.getFilesDir();

如果是缓存文件,使用

this.getCacheDir();

上面两个接口,
第一个得到的目录是 /data/data/你的<package_name>/files/
第二个得到的目录是 /data/data/你的<package_name>/cache
在android机身存储中 /data/data/你的<package_name>/ 这个目录对app而言是可写的。这个目录下面系统会建立几个目录放置db,sharepreference等文件,我们遵守android的规范,app运行需要的文件就放到files目录下 ,缓存文件放到cache中就可以了。

是的,得到了该路径了,但就算往那里面写也不行。手机的文件浏览器根本搜不到。

引用 7 楼 qq_26649897 的回复:
Quote: 引用 4 楼 yexianghu 的回复:

如果不是缓存文件,使用 

this.getFilesDir();

如果是缓存文件,使用

this.getCacheDir();

上面两个接口,
第一个得到的目录是 /data/data/你的<package_name>/files/
第二个得到的目录是 /data/data/你的<package_name>/cache
在android机身存储中 /data/data/你的<package_name>/ 这个目录对app而言是可写的。这个目录下面系统会建立几个目录放置db,sharepreference等文件,我们遵守android的规范,app运行需要的文件就放到files目录下 ,缓存文件放到cache中就可以了。

是的,得到了该路径了,但就算往那里面写也不行。手机的文件浏览器根本搜不到。

手机的文件浏览器 一般是只能看到外部存储区的文件,除非你有root过了,否则是看不到/data下面的文件的。

25分
引用 8 楼 yexianghu 的回复:
Quote: 引用 7 楼 qq_26649897 的回复:
Quote: 引用 4 楼 yexianghu 的回复:

如果不是缓存文件,使用 

this.getFilesDir();

如果是缓存文件,使用

this.getCacheDir();

上面两个接口,
第一个得到的目录是 /data/data/你的<package_name>/files/
第二个得到的目录是 /data/data/你的<package_name>/cache
在android机身存储中 /data/data/你的<package_name>/ 这个目录对app而言是可写的。这个目录下面系统会建立几个目录放置db,sharepreference等文件,我们遵守android的规范,app运行需要的文件就放到files目录下 ,缓存文件放到cache中就可以了。

是的,得到了该路径了,但就算往那里面写也不行。手机的文件浏览器根本搜不到。

手机的文件浏览器 一般是只能看到外部存储区的文件,除非你有root过了,否则是看不到/data下面的文件的。

我用你的writefile3 这个函数是过了,是可以写成功的,你自己看看是不是哪里还有问题,另外因为你写的不是外部存储,所以

  <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

这两个权限不需要加应该也能写成功

引用 9 楼 yexianghu 的回复:
Quote: 引用 8 楼 yexianghu 的回复:
Quote: 引用 7 楼 qq_26649897 的回复:
Quote: 引用 4 楼 yexianghu 的回复:

如果不是缓存文件,使用 

this.getFilesDir();

如果是缓存文件,使用

this.getCacheDir();

上面两个接口,
第一个得到的目录是 /data/data/你的<package_name>/files/
第二个得到的目录是 /data/data/你的<package_name>/cache
在android机身存储中 /data/data/你的<package_name>/ 这个目录对app而言是可写的。这个目录下面系统会建立几个目录放置db,sharepreference等文件,我们遵守android的规范,app运行需要的文件就放到files目录下 ,缓存文件放到cache中就可以了。

是的,得到了该路径了,但就算往那里面写也不行。手机的文件浏览器根本搜不到。

手机的文件浏览器 一般是只能看到外部存储区的文件,除非你有root过了,否则是看不到/data下面的文件的。

我用你的writefile3 这个函数是过了,是可以写成功的,你自己看看是不是哪里还有问题,另外因为你写的不是外部存储,所以

  <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

这两个权限不需要加应该也能写成功

谢谢了,我这边还是不行。我实验室其他同学也很奇怪。我今天回去安个SD卡试试吧。


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明已经折腾两天了,为什么我无法向手机里写文件??