FileOutputStream报错"File not Found" (Android)

问题描述:  

  使用FileOutputStream,根据文档上看,new FileOutputStream(path),如果path路径下的文件不存在,则自动创建新的文件。

  但是在使用过程中,

path = Environment.getExternalStorageDirectory().getPath() + "/document/mine/www/te.text";

  此时new一个FileOutputStream,会报“File not found”的异常。

问题分析:

  修改path路径,  

path = Environment.getExternalStorageDirectory().getPath() + "/document/te.text";

  此时再new新的outputstream对象,可正常编译。

  导致前面提到的异常的原因是,文件目录层级过深。

解决方案:

  自己创建不存在的目录路径。

  在目录层级大于2时(如“/document/mine/te.text"),mkdirs()方法执行时会返回false。

  此处使用拼接的方法,将目录分段进行创建(如将path分为"/document/mine"和”/www/text"),这样便可以避免以上问题,实例代码如下

copyAssetsToSd(context, Environment.getExternalStorageDirectory().getPath() + File.separator + "document",
                "mine" + File.separator + "cordova.js");

private static void copySingleAssetToSd(Context context, String sdPath, String assetPath) {
        InputStream inputStream = null;
        OutputStream outputStream = null;
        try {
            File dirFile = new File(sdPath);
            if (!dirFile.exists()) {
                dirFile.mkdirs(); // 第一段
            }
            File file = new File(sdPath + File.separator + assetPath);
            if (!file.getParentFile().exists()) {
                // 分两次mkdirs,是为了避免目录层级过高导致目录创建失败的情况
                file.getParentFile().mkdirs();
            }
            if (!file.exists()) {
                file.createNewFile();
            }
            outputStream = new FileOutputStream(file); // 创建实例
            inputStream = context.getAssets().open(assetPath);
            byte[] buffer = new byte[1024];
            int length = inputStream.read(buffer);
            while (length > 0) {
                outputStream.write(buffer, 0, length);
                length = inputStream.read(buffer);
            }
            outputStream.flush();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (null != inputStream) {
                    inputStream.close();
                }
                if (null != outputStream) {
                    outputStream.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
时间: 2024-10-10 14:41:22

FileOutputStream报错"File not Found" (Android)的相关文章

centos7 安装nginx和php5.6.25遇到 无法访问php页面 报错file not found 问题解决

php-fpm安装完成,nginx安装完成 netstap -ntl|grep 9000 发下端口正常开启 iptables -L 返现9000端口已经开放 ps -aux|grep nginx 发下nginx进程正常运行 但是就是静态页面可以访问,php动态页面无法访问,报错'file not found' 最后发现问题,修改nginx.conf fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; 改成 fastcgi_par

树莓派(Raspberry Pi 3) centos7使用yum命令报错File "/usr/bin/yum", line 30 except KeyboardInterrupt, e:

使用yum命令报错 File "/usr/bin/yum", line 30 except KeyboardInterrupt, e: ^SyntaxError: invalid syntax 问题如下:  问题出现原因: yum包管理是使用python2.x写的,将python2.x升级到python3.x以后,由于python版本语法兼容性导致问题出现 解决办法: 修改yum配置文件,将python版本指向以前的旧版本 # vi /usr/bin/yum #!/usr/bin/py

MySQL 启动报错:File ./mysql-bin.index not found (Errcode: 13)

一 说明: 前几天,试着复制了一个mysql目录到另一台机器上面,然后更改权限并启动,但是一直报错 Starting MySQL. ERROR! The server quit without updating PID file (/data/mysql/AY14020816093477605eZ.pid). 二 排查: 上面只能看到mysql启动失败,具体的原因,需要查看数据库目录下的.err文件,查看.err文件,内容如下: 140726 00:18:10 mysqld_safe mysql

使用yum命令报错File "/usr/bin/yum", line 30 except KeyboardInterrupt, e:

背景: yum包的管理是使用python写的,有对应的python版本 遇到的问题报错如下: File "/usr/bin/yum", line 30 except KeyboardInterrupt, e: 通过看报错可以了解到是使用了python2的语法,所以了解到当前yum使用的Python2,因为我单独安装了python3,且python3设置为默认版本了,所以导致语法问题 解决方法: 使用python2.6 yum install xxx来使用yum命令 注意:python2

使用yum命令报错File "/usr/bin/yum", line 30 except KeyboardInterrupt, e: SyntaxError: invalid syntax问题

背景: CentOS 7升级Python到3.6.2后,需要在/usr/bin/python创建了一个指向Python 3的软连接,然后将/usr/bin/yum的顶部的: !/usr/bin/python 遇到的问题报错如下: File "/usr/bin/yum", line 30 except KeyboardInterrupt, e: 通过看报错可以了解到是使用了python2的语法,所以了解到当前yum使用的Python2,因为我单独安装了python3,且python3设置

tail -f 报错 file truncated

操作: 循环覆盖向tmp 文件写入坐标 tmp: -45.6976089525,-26.1528715421,-0.0188627654187 报错如下: -15.2517398838,-5.1216965666,1.62749776805tail: /opt/xxx/tmp: file truncated 解决: tail -f -n 1 /opt/xxx/tmp 原文地址:https://www.cnblogs.com/sea-stream/p/10773624.html

故障小记录:yum 安装报错File "/usr/bin/yum", line 30 except KeyboardInterrupt, e:

发生原因: 由于yum是基于python的,之前安装我python3,当我修改了python命令的指向到python3之后就会发生这样的问题. 解决办法: 由于我当初想到可能以后还需要python2,所以还保留着python2的命令指向 所以只需要 vim /usr/bin/yum 然后在头部改一下编译方式就好[是改成你的python2的命令,有些人的命令是python2.7之类的] 由#!  /usr/bin/python 改为#! /usr/bin/python2 另外还需要改一个地方,否则

记一次网站报错File not found.问题

php-fpm解析PHP,"No input file specified","File not found"的问题今天不幸中招了. 大致记录一下几个原因: 1.web根目录下文件不存在. 这个解决方法就不用说了. 2.php-fpm配置问题 有可能是fastcgi.conf的配置问题,也有可能是用php-fpm启动用户造成的权限问题,还有可能是nginx下关于fastcgi的配置问题,具体问题具体分析.

解决Hadoop启动报错:File /opt/hadoop/tmp/mapred/system/jobtracker.info could only be replicated to 0 nodes, instead of 1

今天启动hadoop时,发现datanode启动不了,查看日志发现出现以下的错误: java.io.IOException: File /opt/hadoop/tmp/mapred/system/jobtracker.info could only be replicated to 0 nodes, instead of 1 at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getAdditionalBlock(FSNamesystem