完美解决 java.lang.RuntimeException: java.lang.IllegalArgumentException: File XXXX contains a path separator
目录
所遇问题
java.lang.RuntimeException: java.lang.IllegalArgumentException: File /data/data/XXXX/files/rp.json contains a path separator
代码实例为:
InputStream inputStream = context.openFileInput(rolePath + File.separatorChar + rolePermissionFileName);
if ( inputStream != null ) {
InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
String receiveString = "";
StringBuilder stringBuilder = new StringBuilder();
while ( (receiveString = bufferedReader.readLine()) != null ) {
stringBuilder.append(receiveString);
}
inputStream.close();
String ret = stringBuilder.toString();
}
解决思路
查看FileOutputStream文档:
public abstract FileOutputStream openFileOutput (String name, int mode)
Since: API Level 1
Open a private file associated with this Context's application package for writing. Creates the file if it doesn't already exist.
Parameters
name The name of the file to open; can not contain path separators.
mode Operating mode. Use 0 or MODE_PRIVATE for the default operation, MODE_APPEND to append to an existing file, MODE_WORLD_READABLE andMODE_WORLD_WRITEABLE to control permissions.
Returns
FileOutputStream Resulting output stream.
发现需如下操作:
File file = new File("/data/data/XXXX/files/rp.json");
fis = new FileInputStream(file);
解决方法
完整解决实例:
String path = "/data/data/XXXX/files";
String name = "rp.json";
File filePath = new File(path);
if(!filePath.exists()) {
filePath.mkdirs();
}
String fileName = path + File.separatorChar + name;
File file = new File(fileName);
if (!file.exists()){
file.createNewFile();
}
InputStream inputStream = new FileInputStream(file);
if ( inputStream != null ) {
InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
String receiveString = "";
StringBuilder stringBuilder = new StringBuilder();
while ( (receiveString = bufferedReader.readLine()) != null ) {
stringBuilder.append(receiveString);
}
inputStream.close();
ret = stringBuilder.toString();
}