我正在尝试将Java程序转换为c#.
有没有相当于Java的mkdirs()命令递归生成文件夹?
我是Android的新手,当我尝试将文件保存到内部存储器时,我遇到了问题,新的示例适用于我的sdk,但不适用于我的手机.
我正试图在一个索尼爱立信xperia中运行de示例,顺便说一下android 2.1 ... log.i - 给了我下一行:
/data/data/com.example.key/files/text/(my_title)
Run Code Online (Sandbox Code Playgroud)
谢谢.
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.new_text);
file = (EditText) findViewById(R.id.title_new);
entry = (EditText) findViewById(R.id.entry_new);
btn = (Button) findViewById(R.id.save_new);
btn.setOnClickListener( new OnClickListener() {
@Override
public void onClick(View v) {
File myDir = getFilesDir();
NEWFILENAME = file.getText().toString();
if (NEWFILENAME.contentEquals("")){
NEWFILENAME = "UNTITLED";
}
NEWENTRY = entry.getText().toString();
try {
File file_new = new File(myDir+"/text/", NEWFILENAME);
file_new.createNewFile();
Log.i("file", file_new.toString());
if (file_new.mkdirs()) {
FileOutputStream fos = new FileOutputStream(file_new);
fos.write(NEWENTRY.getBytes()); …
Run Code Online (Sandbox Code Playgroud) 我需要在Android上保存相机中的图像.我在清单中使用了写入外部存储权限,我正在使用此代码
File dir = new File(Environment.getExternalStorageDirectory(), "Test");
if (!dir.exists() || !dir.isDirectory())
dir.mkdirs();
String path = dir.getAbsolutePath();
Log.d(TAG, path); //log show the path
File file = new File(dir.getAbsolutePath() + "/Pic.jpg");
Log.d(TAG, file.getAbsolutePath()); //again path is shown here
outStream = new FileOutputStream(file);
outStream.write(bytes);
outStream.close();
Log.d(TAG, "onPictureTaken - wrote bytes: " + bytes.length); //fail here
} catch (FileNotFoundException e) {
Log.d(TAG, "not done"); //error is here (this exception is thrown)
} catch (IOException e) {
Log.d(TAG, "not");
} finally { }
Run Code Online (Sandbox Code Playgroud)
我也试过mkdir()而不是mkdirs()相同的结果.
知道代码中出了什么问题吗? …
File.mkdirs JavaDocs:
public boolean mkdirs()
创建此抽象路径名指定的目录,包括任何必需但不存在的父目录.请注意,如果此操作失败,则可能已成功创建一些必需的父目录.
返回:当且仅当创建目录时才返回true,以及所有必需的父目录; 否则是假的
我的问题是:如果它想要创建的某些目录已经存在,mkdirs()是否返回false?或者,如果它成功创建文件的整个路径,它是否只返回true,无论某些目录是否已经存在?
我有的ANT构建脚本执行以下操作:
net use
<mkdir>
用来在挂载的驱动器上创建一个目录(P :)以下是我的代码 mkdir
<echo>Creating ${buildRequesterUserId} folder at mirroring site starts</echo>
<mkdir dir="P:\build_output\${buildRequesterUserId}"/>
<echo>Creating ${buildRequesterUserId} folder at mirroring site ends</echo>
Run Code Online (Sandbox Code Playgroud)
有时候文件夹的创建工作,有些时候失败并出现以下错误
creation was not successful for an unknown reason
并使构建失败
此错误随机发生.Mkdir工作了一段时间.我不确定为什么它会失败并且不确定它是否因为网络滞后而导致
我试图创建的目录可能已经存在,也可能不存在.我读到如果目录已存在,mkdir不会执行任何操作
我检查failonerror
了mkdir 没有.我不希望构建因此而失败.
我已经copy
部分处理了错误,但不知道如何处理这个错误mkdir
我怎样才能做到这一点?任何帮助,将不胜感激
问候
KARTHIK
在我的Android应用程序中,我试图在SD卡上创建以下文件夹:
/mnt/sdcard/OSGiComponents/admin/felix-cache/
Run Code Online (Sandbox Code Playgroud)
这是代码:
File cacheDir =
new File( Environment.getExternalStorageDirectory().getAbsolutePath() +
"/OSGiComponents/admin/felix-cache/" );
// Create the folder
cacheDir.mkdirs();
// Check if it exists
if ( ! cacheDir.exists() ) {
Log.e ( "Debug" , "Cache directory cannot be created" );
}
Run Code Online (Sandbox Code Playgroud)
我在android清单文件的清单标签下有WRITE_STORAGE_PERMISSION.我能够在SD卡上创建其他文件夹和文件而不会出现问题.该应用程序适用于以下手机:
然而,在运行Ice Cream Sandwich(4.0.4)的三星Galaxy Nexus手机(无根)上,该目录被创建为零大小的文件,可以在Astro中看到.exists()调用返回false.
我怀疑这是一个权限问题,但我不确定它是什么,以及为什么创建一个0字节文件而exists()返回false.代码中没有其他地方我创建这个文件.
关于可能出现什么问题的任何建议?
谢谢 :)
更新:我想我已经确定了问题,请看我发布的答案.
我正在创建文件和文件夹树.我正在改写多线程.我看到的唯一弱点是创建文件夹时.现在它一个接一个(深入).在我写下文件之前,我会检查路径是否存在.如果没有,我使用mkdirs来创建所有缺失的东西.
public void checkDir(String relativePath) {
File file = new File(homePath + relativePath);
if (!file.exists()) {
if (file.mkdirs()) {
log.info("Directory: " + homePath + relativePath + " is created!");
} else {
log.error("Failed to create directory: " + homePath + relativePath + " !");
}
}
}
Run Code Online (Sandbox Code Playgroud)
我有一个问题,当我使用两个线程时会发生什么.一个有A/B/C路径,另一个有A/B/D. 假设我只有一个文件夹但不存在B.所以他们都会检查路径是否存在并且想要创建它.因此其中一个可能会失败,因为另一个会更快.那么我该如何管理呢?
也许我过分思考,但从理论上讲,这种情况可能会发生.目前我使用常规Thread,但我想使用spring TaskExecutor.它自己处理关键部分,但这不是共享变量或任何东西,路径是不同的,所以我认为它不会识别它.
谢谢你的建议.
我想在SD卡中创建一个文件夹,我已经添加了权限
<user-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
Run Code Online (Sandbox Code Playgroud)
在manifest file.below是我的代码,但mkdirs返回false!你能帮助我吗!
File exportDir = new File(
Environment.getExternalStorageDirectory().toString(), "happydiarybackup");
if (!exportDir.exists()) {
boolean a = exportDir.mkdirs();
Log.d("mkdir ",exportDir.getAbsolutePath() + " make "+ a);
}
Run Code Online (Sandbox Code Playgroud) 我的应用程序中有一个名为"重置"的按钮,用于删除整个文件夹(用户文件夹).在那之后,我试图再次创建相同的文件夹,第一次尝试它,它允许我创建文件夹,但第二次我尝试重置并重新创建用户文件夹,应用程序崩溃因为mkdir ()没有创建该文件夹,我试图在该文件夹上创建一个数据库.但是,奇怪的是,崩溃后,文件夹已经创建.
我有权限:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
Run Code Online (Sandbox Code Playgroud)
我尝试了两种方法:
f.mkdir();
f.mkdirs();
Run Code Online (Sandbox Code Playgroud)
我有什么不对的?任何的想法?
我正在尝试使用新的运行时权限将我的应用源代码更新为Android 6.0.
但是,如果用户授予应用程序存储权限,则应用程序无法'onRequestPermissionsResult'
使用该方法在方法中创建目录'mkdirs'
.
在AndroidManifest.xml中我把'uses-permission'
:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.xample.provasd"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk android:minSdkVersion="11" android:targetSdkVersion="23" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<!-- application, activity, etc -->
Run Code Online (Sandbox Code Playgroud)
然后在MainActivity中处理权限请求:
public void executeButton(View view){
final String[] PERMISSIONS_STORAGE = { Manifest.permission.WRITE_EXTERNAL_STORAGE };
//Asking request Permissions
ActivityCompat.requestPermissions(this,PERMISSIONS_STORAGE, 9);
}
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
boolean writeAccepted = false;
switch(requestCode){
case 9:
writeAccepted = grantResults[0]==PackageManager.PERMISSION_GRANTED;
break;
}
if(writeAccepted){
String state = Environment.getExternalStorageState();
if (Environment.MEDIA_MOUNTED.equals(state)) {
File …
Run Code Online (Sandbox Code Playgroud)