无法将中文字符写入文件名

2024-01-26

public static void main(String[] args) throws IOException
{
    Scanner in = new Scanner(System.in);
    String fileName = in.nextLine();

    Writer out = new BufferedWriter(new OutputStreamWriter(
            new FileOutputStream("C:/temp/"+fileName+".txt"), "UTF-8"));//Ex thrown
    out.close();
}

我正在尝试创建一个可以处理文件名中的汉字的编写器。所以我可以创建一个名为你好.txt例如。

不过我得到了FileNotFoundException使用上面的代码,它对于英文字符工作得很好,但对于中文字符则不行。

我在这里遵循了答案:如何用Java编写UTF-8文件? https://stackoverflow.com/questions/1001540/how-to-write-a-utf-8-file-with-java生成上面的代码,但它不起作用。

有人知道我怎样才能做到这一点吗?

堆栈跟踪:

Exception in thread "main" java.io.FileNotFoundException: C:\temp\??.txt (The filename, directory name, or volume label syntax is incorrect)
    at java.io.FileOutputStream.open0(Native Method)
    at java.io.FileOutputStream.open(Unknown Source)
    at java.io.FileOutputStream.<init>(Unknown Source)
    at java.io.FileOutputStream.<init>(Unknown Source)

使用蔚来:

Path path = Paths.get("C:/temp/"+fileName+".txt");//throws ex
Charset charset = Charset.forName("UTF-8");
Path file = Files.createFile(path);
BufferedWriter  bufferedWriter = Files.newBufferedWriter(file, charset);
bufferedWriter.close();

Stack:

Exception in thread "main" java.nio.file.InvalidPathException: Illegal char <?> at index 8: C:/temp/?.txt
    at sun.nio.fs.WindowsPathParser.normalize(Unknown Source)
    at sun.nio.fs.WindowsPathParser.parse(Unknown Source)
    at sun.nio.fs.WindowsPathParser.parse(Unknown Source)
    at sun.nio.fs.WindowsPath.parse(Unknown Source)
    at sun.nio.fs.WindowsFileSystem.getPath(Unknown Source)
    at java.nio.file.Paths.get(Unknown Source)

我发现这个问题与eclipse控制台的字符编码有关,与Java.

我使用了相同的代码并使用了Run Configuration不同的是,如下图所示,

现在运行程序后,我在控制台中得到以下输出,

Exception in thread "main" java.io.FileNotFoundException: C:\temp\??.txt (The filename, directory name, or volume label syntax is incorrect)
    at java.io.FileOutputStream.open(Native Method)
    at java.io.FileOutputStream.<init>(FileOutputStream.java:206)
    at java.io.FileOutputStream.<init>(FileOutputStream.java:95)
    at Test.main(Test.java:21)

结论: 这里是为了ISO-8859-1运行配置中的编码Scanner将无法从控制台正确读取这些字符,因为控制台具有不同的字符编码,并且您将有?? as a filename.

请更改您的控制台的字符编码,我坚信您正在使用某些 IDE。可能您已更改或您的控制台继承了字符编码,而该编码不应该对这些字符进行编码。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

无法将中文字符写入文件名 的相关文章

  • 插入最大日期(独立于数据库)

    在我的本地设置中 我使用一个简单的 H2 数据库 托管 解决方案将有另一个 类似但不相同 数据库 我需要将最大可能日期插入到日期时间列中 我尝试使用 Instant MAX 但是 这会导致列中出现 169104626 12 11 20 08
  • 是什么决定了从 lambda 创建哪个函数式接口?

    请考虑这个例子 import java util function Consumer public class Example public static void main String args Example example new
  • Java:迭代 Collection 的最佳方法(此处为 ArrayList)

    今天 当我看到一段我已经使用了数百次的代码时 我很高兴地开始编码 迭代集合 此处为 ArrayList 出于某种原因 我实际上查看了 Eclipse 的自动完成选项 这让我想知道 在什么情况下以下循环比其他循环更好使用 经典的数组索引循环
  • Android在排序列表时忽略大小写

    我有一个名为路径的列表 我目前正在使用以下代码对字符串进行排序 java util Collections sort path 这工作正常 它对我的 列表进行排序 但是它以不同的方式处理第一个字母的情况 即它用大写字母对列表进行排序 然后用
  • 比较两个文本文件的最快方法是什么,不将移动的行视为不同

    我有两个文件非常大 每个文件有 50000 行 我需要比较这两个文件并识别更改 然而 问题是如果一条线出现在不同的位置 它不应该显示为不同的 例如 考虑这个文件A txt xxxxx yyyyy zzzzz 文件B txt zzzzz xx
  • 画透明圆,外面填充

    我有一个地图视图 我想在其上画一个圆圈以聚焦于给定区域 但我希望圆圈倒转 也就是说 圆的内部不是被填充 而是透明的 其他所有部分都被填充 请参阅这张图片了解我的意思 http i imgur com zxIMZ png 上半部分显示了我可以
  • Hazelcast 分布式锁与 iMap

    我们目前使用 Hazelcast 3 1 5 我有一个简单的分布式锁定机制 应该可以跨多个 JVM 节点提供线程安全性 代码非常简单 private static HazelcastInstance hInst getHazelcastIn
  • hibernate锁等待超时超时;

    我正在使用 Hibernate 尝试模拟对数据库中同一行的 2 个并发更新 编辑 我将 em1 getTransaction commit 移至 em1 flush 之后我没有收到任何 StaleObjectException 两个事务已成
  • 在 Netbeans 8 上配置 JBoss EAP 的问题

    我已经下载了 JBoss EAP 7 并正在 Netbeans 8 上配置它 我已经到达向导 实例属性 其中要求从选择框中选择 域 当我打开选择框时 它是空的 没有什么可以选择的 因此 完成 按钮也处于非活动状态 这使得无法完成配置 我通过
  • Java 8 流 - 合并共享相同 ID 的对象集合

    我有一系列发票 class Invoice int month BigDecimal amount 我想合并这些发票 这样我每个月都会收到一张发票 金额是本月发票金额的总和 例如 invoice 1 month 1 amount 1000
  • 如何在selenium服务器上提供自定义功能?

    我知道可以通过某种方法获得一些硒功能 其中之一如下 driver getCapabilities getBrowserName 它返回浏览器名称的值 但如果它指的是一个可用的方法 如果我没有误解的话 这似乎与自定义功能有关 就像我的意思是
  • 有没有一种快速方法可以从 Jar/war 中删除文件,而无需提取 jar 并重新创建它?

    所以我需要从 jar war 文件中删除一个文件 我希望有类似 jar d myjar jar file I donot need txt 的内容 但现在我能看到从 Linux 命令行执行此操作的唯一方法 不使用 WinRAR Winzip
  • 如何知道抛出了哪个异常

    我正在对我们的代码库进行审查 有很多这样的陈述 try doSomething catch Exception e 但我想要一种方法来知道 doSomething 抛出了哪个异常 在 doSomething 的实现中没有 throw 语句
  • java.lang.NumberFormatException: Invalid int: "3546504756",这个错误是什么意思?

    我正在创建一个 Android 应用程序 并且正在从文本文件中读取一些坐标 我在用着Integer parseInt xCoordinateStringFromFile 将 X 坐标转换为整数 Y 坐标的转换方法相同 当我运行该应用程序时
  • 测试弱引用

    在 Java 中测试弱引用的正确方法是什么 我最初的想法是执行以下操作 public class WeakReferenceTest public class Target private String value public Targe
  • 替换后增量

    我自己已经有一个问题了 但我想扩展它后增量示例 https stackoverflow com questions 51308967 post increment with example char a D int b 5 System o
  • 将 Azure AD 高级自定义角色与 Spring Security 结合使用以进行基于角色的访问

    我创建了一个演示 Spring Boot 应用程序 我想在其中使用 AD 身份验证和授权 并使用 AD 和 Spring Security 查看 Azure 文档 我执行了以下操作 package com myapp contactdb c
  • Trie 数据结构 - Java [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 是否有任何库或文档 链接提供了在 java 中实现 Trie 数据结构的更多信息 任何帮助都会很棒 Thanks 你可以阅读Java特里树
  • 调整添加的绘制组件的大小和奇怪的摆动行为

    这个问题困扰了我好几天 我正在制作一个特殊的绘画程序 我制作了一个 JPanel 并添加了使用 Paint 方法绘制的自定义 jComponent 问题是 每当我调整窗口大小时 所有添加的组件都会 消失 或者只是不绘制 因此我最终会得到一个
  • GUI Java 程序 - 绘图程序

    我一直试图找出我的代码有什么问题 这个想法是创建一个小的 Paint 程序并具有红色 绿色 蓝色和透明按钮 我拥有我能想到的让它工作的一切 但无法弄清楚代码有什么问题 该程序打开 然后立即关闭 import java awt import

随机推荐

  • 默认 Spring Security 重定向到 favicon

    我正在使用 Spring Security 3 1 我在授权后重定向时遇到问题 它重定向到 favicon 404 错误 添加role anonymous因为 favicon 没有帮助
  • 使用额外信息进行 Bean 验证

    我正在尝试创建一个UniqueName注释作为创建项目 api 的 cutomize bean 验证注释 PostMapping users userId projects public ResponseEntity createNewPr
  • 使用 ASP.NET 在 Windows Azure Blob 存储上设置 CORS

    我正在尝试在我的 Windows Azure blob 存储帐户上设置 CORS 属性 我正在使用 ASP NET 服务器发送 PUT 请求 服务器正在发回禁止响应 表示 服务器无法验证请求 确保授权标头的值格式正确 包括签名 所以它一定是
  • Kotlin Gradle 插件:apiVersion 与 languageVersion

    Kotlin Gradle 插件包含compileKotlin可以通过以下方式配置的任务apiVersion and languageVersion参数 doc https kotlinlang org docs reference usi
  • 使用flywaydb时如何对存储过程进行版本控制?

    我目前有一个使用 Microsoft SQL Server 后端的 Java Web 应用程序 数据库迁移当前由 sqlcmd 手动完成 它使用 r 命令来引用存储过程和视图的脚本文件 这样 每个存储过程都有自己的文件 proc somep
  • gwan 不重新编译 java 文件

    我针对 Ubuntu 12 04 服务器上运行的 gwan 服务器附带的标准 hello java 和 hello c 进行了测试 G WAN 4 3 1 64 位 2013 年 3 月 1 日 17 36 39 一旦我用gwan运行 须藤
  • SQL日期查询包括月份,即使没有数据

    我有一个预订数据库 其中包含每次预订的不同日期 我想获得每个月所有预订的计数 例如 JAN 12 FEB 15 MAR 53 APR 25 如果我一个月内的预订量为零 我怎样才能获得列出的月份 例如 JAN 12 FEB 15 MAR 53
  • Sqlite 3 与 NSCoding 协议

    哪个对于存储缓存数据更有效 我看到 Mac 版 Twitter 将大量信息存储在 sqlite 文件中 一些应用程序实现 NSCoding 协议 两者相比是否有任何优势 两者截然不同 SQLite 是一个关系数据库 周围的东西NSCodin
  • XSL:如何比较两个日期?

    我有一个像这样的xml
  • 如何使用 xcode 3.2.5 将应用程序提交到 mac 应用商店

    好吧 我用 Xcode 3 2 5 开发了一个 mac 应用程序 我也从 mac 应用商店创建了证书和规定 但问题是 provisionprofile 没有安装在 Xcode 中 我使用的是 Xcode 3 2 5 我可以不提交 mac 应
  • 纱线中最接近“npm ci”的是什么

    在npm中 有一个ci用于以干净状态安装项目的命令 在文档中 据称 https docs npmjs com cli ci that 通过跳过 它可以比常规 npm 安装快得多 某些面向用户的功能 也比常规的更加严格 安装 这可以帮助捕获由
  • Cython 中的 abs(双复合体)

    如何获得 a 的绝对值double complex多变的 def f cdef double complex aaa 1 2j cdef double bbb abs aaa 第二个作业以黄色突出显示cython ahtml输出 aaa在应
  • 向 SMTP 电子邮件正文添加多行 VB.NET

    我可以使用此代码在我的 Exchange 服务器上发送电子邮件 Try Dim SmtpServer As New SmtpClient Dim mail As New MailMessage SmtpServer Credentials
  • WooCommerce 以编程方式/通过函数创建帐户

    无论如何 是否可以像使用 WordPress 用户一样以编程方式创建客户 显然 WooCommerce 用户共享一些相同的 WordPress 用户字段 还需要设置其他内容 例如帐单 邮政地址 以前有人实现过这个吗 我在其网站上的 WooC
  • JavaScript:按需加载 jQuery

    将 jQuery 库动态包含到页面中的最轻量级方法是什么 我正在开发一个页面 有时它运行一些自定义脚本 10 行 有时还需要整个 jquery 只需在需要时为 jQuery 添加一个脚本标签即可 var script document cr
  • 如何拦截 JTA 事务事件并获取对与事务关联的当前 EntityManager 的引用

    长话短说 我们开发和维护一个可以在使用 JavaEE7 CDI JPA 的其他项目中使用的库 应用程序将在 Glassfish 4 0 下运行 并使用 Hibernate 的 JPA 实现来实现底层 PostgreSQL 持久性 这是长期迁
  • 引用单元格的父tableView

    有没有办法从 tableview 的单元格引用父 tableView Thanks 您可以将此方法添加到 UITableViewCell 的自定义子类中 id parentTableView UIView v self superview
  • Python Tkinter 线程 - 当用户关闭 GUI 时如何结束/终止/停止线程

    如果我有一个与 tkinter 一起运行的非 for 循环线程任务 例如time sleep seconds 我怎样才能在任务结束之前或之前安全地结束任务time sleep 结束了 如果运行该程序并单击按钮 然后关闭 GUI 窗口fini
  • 如何彻底去除wpf中的按钮边框?

    我正在尝试创建一个其中包含图像且没有边框的按钮 就像 Firefox 工具栏按钮一样 然后将鼠标悬停在它们上方并查看完整的按钮 我尝试过设置BorderBrush to Transparent BorderThickness to 0 并且
  • 无法将中文字符写入文件名

    public static void main String args throws IOException Scanner in new Scanner System in String fileName in nextLine Writ