我在SD卡上创建文件夹和文件时遇到问题。
以下是代码:
File folder = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).toString() + "/folder");
boolean success;
if (!folder.exists()) {
success = folder.mkdirs();
}
File obdt = new File(folder, "file.txt");
try {
success = obdt.createNewFile();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
使用此代码,我希望在SD卡的folder
文件夹中创建文件夹Download
,文件file
。我希望用户可以访问该文件。所以我想把它放在一个共享文件夹中。
success
变量为true
,当我再次运行代码时,该文件夹已存在,并且不会进入if块。
但是我无法在文件浏览器中看到sdcard上创建的文件夹和文件。
信息:getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).toString()
返回storage/sdcard/Download
我与Galaxy Nexus合作。
答案 0 :(得分:3)
该死! :)
现在我解决了我的问题......我误解了在文件系统中创建文件的操作。
当我谈到文件浏览器时,我的意思是操作系统的文件浏览器而不是DDMS中的文件浏览器:)。
我想当我创建一个文件时,我会在操作系统的文件浏览器中看到它,但是当设备连接到PC时,文件只能在DDMS文件浏览器中看到。
对不起,我是Android的新手;)
当应用程序独立运行而没有PC连接时,之后我连接到PC我看到创建的文件和文件夹当然:)
感谢您的帮助
答案 1 :(得分:0)
如果您还没有这样做,则需要通过将以下行添加到您的清单中,为您的应用提供写入SD卡的正确权限:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
如果您已经这样做,请查看:
File obdt = new File(/sdcard/folder/file.txt)
try {
success = obdt.createNewFile();
} catch (IOException e1) {
e1.printStackTrace();
}
作品。
答案 2 :(得分:0)
来自logcat的任何错误?
另外:尝试类似Log.I(“PATHNAME”,folder.absolutePath());然后查看你的logcat以确定你在哪里创建你认为它的文件夹。
答案 3 :(得分:0)
试一试。
File dir = new File(Environment.getExternalStorageDirectory()
+ "/XXX/Wallpapers/");
File[] files = dir.listFiles();
if (files == null)
{
int numberOfImages = 0;
BitmapDrawable drawable = (BitmapDrawable) imageView
.getDrawable();
Bitmap bitmap = drawable.getBitmap();
File sdCardDirectory = Environment
.getExternalStorageDirectory();
new File(sdCardDirectory + "/XXX/Wallpapers/").mkdirs();
File image = new File(sdCardDirectory
+ "/XXX/Wallpapers/Sample" + numberOfImages + ".JPG");
boolean success = false;
FileOutputStream outStream;
try {
outStream = new FileOutputStream(image);
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, outStream);
outStream.flush();
outStream.close();
success = true;
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
if (success) {
Toast.makeText(
getApplicationContext(),
"Image saved successfully in Sdcard/XXX/Wallpapers",
Toast.LENGTH_LONG).show();
} else {
Toast.makeText(getApplicationContext(),
"Error during image saving", Toast.LENGTH_LONG)
.show();
}
别忘了在清单
中添加权限 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
答案 4 :(得分:0)
您无法在资源管理器中看到文件夹/文件?也许是因为MediaScanner处于活动状态,但未添加文件。您可以在程序中执行此操作,也可以在手机设置中的某个位置切换Media Scanner。
答案 5 :(得分:0)
显然,MTP中存在已知错误。
Issue 195362 当使用USB电缆将手机连接到计算机时,所有使用MTP而非USB Mass Storage的手机都无法正确显示文件列表。在设备上运行的Android应用也无法看到这些文件。
实际上和2012年一样久了
答案 6 :(得分:0)
我遇到了同样的问题:尽管文件已刷新并关闭,但是创建的文件和文件夹在写入sdcard后不会立即显示!
它们不会通过USB或手机上的文件浏览器显示在您的计算机上。
我观察到三件事:
/storage/emulated/0/
开头,并不意味着它会在您的sdcard上-而是可能在您的主存储上。adb shell ls /sdcard
,则文件会显示!您可以使用adb pull ...
立即获取文件。您可能也可以使用DDMS。我使用的代码是:
Gson gson = new GsonBuilder().setPrettyPrinting().create();
String json = gson.toJson(myArrayList);
try {
File externalDir = getExternalStorageDirectory();
File newFile = new File(externalDir, "myfile.txt");
FileOutputStream os = new FileOutputStream(newFile);
os.write(json.getBytes());
os.flush();
os.close();
Timber.i("saved file to %s",newFile.getAbsoluteFile().toString());
}catch (Exception ex)
{
Toast.makeText(getApplicationContext(), "Save to private external storage failed. Error message is " + ex.getMessage(), Toast.LENGTH_LONG).show();
}
和
Gson gson = new GsonBuilder().setPrettyPrinting().create();
String json = gson.toJson(myArrayList);
try {
File externalDir = getExternalStorageDirectory();
File newFile = new File(externalDir, "myfile.txt");
FileWriter fw = new FileWriter(newFile);
fw.write(json);
fw.flush();
fw.close();
Timber.i("saved file to %s",newFile.getAbsoluteFile().toString());
}catch (Exception ex)
{
Toast.makeText(getApplicationContext(), "Save to private external storage failed. Error message is " + ex.getMessage(), Toast.LENGTH_LONG).show();
}
为什么会这样?好像您第一次体验它时就必须忍受的另一种“ Android主义”。