我有一个 .txt 文件,其中包含数百万邮政编码。 都有格式良好(可读)。 我的目标是将邮政编码导入MySql数据库 我需要将 .txt 文件中的邮政编码转换为 .sql 文件。
我编写了一个 Java 应用程序来将重要部分转换为SQL文件。
编辑 .txt 文件包含许多信息。这就是我想要读取文件(在Java中),过滤文件内容并最终创建 .sql 文件的原因。非常感谢用“Python,SQL,C ++,BrainF ***”或其他语言编写的任何解决方案,但我很感激我的特定 Java 代码的解决方案。 .txt 文件使用UTF-8编码。
转换为“.sql”后,内容有几个问题。 例如,SQL文件中的西里尔字符“Я”不是“已知”。 我认为,编码是错误的 如果有人能帮我弄清楚如何解决这个问题,那就太好了。
TXT-文件: TXT-File
SQL-File:SQL-File
try (BufferedReader br = new BufferedReader(
new FileReader(GeoData.class.getResource(sourceFilenameInput.getText().trim()).getFile().trim()))) {
for (String line; (line = br.readLine()) != null;) {
GeoData geoData = new GeoData();
geoData.addOrt(getPlaceFromFile(line));
}
getPlaceFromFile方法:
private String getPlaceFromFile(String line) {
String[] placeHolder = line.split("\t");
if (placeHolder .length > 2) {
for (int i = 0; i < placeHolder .length - 2; i++) {
if (!placeHolder [i + 2].trim().isEmpty() && placeHolder [i + 2].trim().length() > 3) {
return filterPlace(placeHolder [i + 2].trim(), "'", "\\", "^", ";", "*", "|");
}
}
}
return "EMPTY";
}
FilterPlace方法:
private String filterPlace(String place, String... filter) {
String newPlace = place;
for (String string : filter) {
if (newPlace .trim().contains(string))
newPlace = newPlace .trim().replace(string, " ");
}
return newPlace;
}
到目前为止我尝试过什么?
我将FileReader
替换为InputStreamReader
,并将FileInputStream
与Charset UTF-8 一起使用。在UTF-8中转换后,SQL-File看起来像这样:
UTF8 Converted SQL-FILE
答案 0 :(得分:1)
我找到了答案。
我刚刚编辑了eclipse中的编码格式来解决问题。
Workspace
&gt; Preferences
&gt; General
&gt;点击Workspace
并修改Text file encoding
从Cp1252
到UTF-8
。
这就是全部而且有效。
答案 1 :(得分:0)
如果.txt列在\t
上拆分,请不要在加载前进行转换。而只需使用LOAD DATA INFILE ...
SQL语句,如
LOAD DATA LOCAL INFILE 'the_file.txt'
INTO tablename
CHARACTER SET utf8mb4
COLUMNS TERMINATED BY "\t"
LINES TERMINATED BY "\n"
(col1, zip, name);
我不知道如何从Java运行它。但是,您提供的代码都不需要。
你的评论中有一些垃圾 -
E2808B 8203=x200B [] BN ZERO WIDTH SPACE
E2808C 8204=x200C [] BN ZERO WIDTH NON-JOINER
(我通过双击十六进制来发现它来复制它。但它停在中间!)
Д
为十六进制D094
,但如果您double encode,则会获得十六进制C390 E2809D
。请查看该链接,了解可能的原因。