尝试使用 Kotlin 创建 pdf 文件。获取“java.io.FileNotFoundException:20210922:打开失败:EROFS(只读文件系统)”错误/

Posted

技术标签:

【中文标题】尝试使用 Kotlin 创建 pdf 文件。获取“java.io.FileNotFoundException:20210922:打开失败:EROFS(只读文件系统)”错误/【英文标题】:Trying to create a pdf file with Kotlin. Getting "java.io.FileNotFoundException: 20210922: open failed: EROFS (Read-only file system)" error/ 【发布时间】:2021-11-15 13:57:51 【问题描述】:

尝试在 android studio 中使用 Kotlin 创建一个 pdf 文件。出现“java.io.FileNotFoundException: 20210922: open failed: EROFS (Read-only file system)”错误/

我的功能是:

private fun savePDF() 
    val mDoc = Document()
    val mFileName = SimpleDateFormat("yyyyMMdd", Locale.getDefault()).format(System.currentTimeMillis())
    
    val mFilePath = Environment.DIRECTORY_DOWNLOADS.toString() + "/" + mFileName + ".pdf"

    try 
        PdfWriter.getInstance(mDoc, FileOutputStream(mFileName))

        mDoc.open()
        val chno1 = findViewById<EditText>(R.id.chno1)
        val data =  chno1.toString().trim()
        mDoc.addAuthor("XYZ")
        mDoc.add(Paragraph(data))
        mDoc.close()
        Toast.makeText(this, "$mFileName.pdf \n is create to \n$mFilePath",Toast.LENGTH_SHORT).show()
    
    catch (e: Exception)
        Toast.makeText(this,""+e.toString(),Toast.LENGTH_LONG).show()
    


override fun onRequestPermissionsResult(
    requestCode: Int,
    permissions: Array<out String>,
    grantResults: IntArray
) 
    when(requestCode)
    
        STORAGE_CODE -> 
            if (grantResults.size > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) 
                savePDF()
            
            else 
                Toast.makeText(this, "Permission denied", Toast.LENGTH_SHORT).show()
            
        
    
    super.onRequestPermissionsResult(requestCode, permissions, grantResults)

【问题讨论】:

请澄清您的具体问题或提供更多详细信息以准确突出您的需求。正如目前所写的那样,很难准确地说出你在问什么。 【参考方案1】:

乍一看,唯一可能发生EROFS (Read-only file system) 错误的代码是FileOutputStream(mFileName) 中的实例化

PdfWriter.getInstance(mDoc, FileOutputStream(mFileName))

因此,您的应用程序的当前工作目录显然位于一个只读文件系统上。

不过,也许您实际上并不想在当前工作目录中创建该文件,而是在mFilePath 中使用的下载位置创建该文件。在这种情况下使用mFilePath 而不是mFileName,即

PdfWriter.getInstance(mDoc, FileOutputStream(mFilePath))

【讨论】:

以上是关于尝试使用 Kotlin 创建 pdf 文件。获取“java.io.FileNotFoundException:20210922:打开失败:EROFS(只读文件系统)”错误/的主要内容,如果未能解决你的问题,请参考以下文章

Android中Kotlin创建PDF

使用 kotlin for android app 将 pdf 文件上传到 firebase 存储

使用 Uri 用 Kotlin 解析 pdf?

如何修复 Kotlin 中 FileInputStream 和 FileDescriptor 的错误路径

为 pdf 文件创建读取流以上传到 s3 存储桶

如何在kotlin android中将pdf文件编码为base64字符串