问题描述
小弟最近在做一个MP3播放器当作练习,可是到在SDCard创建文件时老是报错,弄了好几天都解决不了。麻烦各位指点迷津,非常感谢。每当执行到file.createNewFile()就报错,报错信息是java.io.IOException: invalid argument目录能够成功创建,就文件不行。目录路径:/mnt/sdcard/mp3/ 文件路径:/mnt/sdcard/mp3/heart.mp3注:sdcard文件操作权限已添加 问题补充:非常感谢lz解答,可能我表达的不清楚,我创建目录和文件的代码就是像lz那样写的。今天运行lz的代码进行对比,终于找出来原因了。原来是文件名后面有一个空格,导致创建文件失败。源代码如下:File file=new File(fileName);//fileName变量结尾存在空格,导致参数无效。要 先用trim(),去除前后空格if(!file.exists()) file.createNewFile();
解决方案
根本原因是你的mp3那个目录不存在,也就是说你要创建heart.mp3这个文件,mp3这个目录必须存在,另外创建目录和创建文件不一样的,创建目录file.mkdir(),创建文件才是file.createNewFile();建议楼主多看看文件操作的基础,系统的看一下。附上代码,已经测试通过package com.android.file;import java.io.File;import java.io.IOException;import android.app.Activity;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.Toast;public class AndroidtestActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Button btn = new Button(this); btn.setText("点击"); setContentView(btn); btn.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {File directory = new File("/mnt/sdcard/mp3/");File file = new File("/mnt/sdcard/mp3/hear.mp3");if(!directory.exists()){directory.mkdir();//没有目录先创建目录}try {if(file.createNewFile()){Toast.makeText(AndroidtestActivity.this, "创建文件成功", Toast.LENGTH_SHORT).show();}} catch (IOException e) {e.printStackTrace();}}}); }}