当前位置: 首页 > 知识库问答 >
问题:

Java-将字符串逐行写入文件而不是一行/无法将字符串转换为字符串[]

商飞翮
2023-03-14

编程相对较新。我想读取一个URL,修改文本字符串,然后将其写入以行分隔的csv文本文件。

阅读

data_a,data_b,data_c,...
data_a1,data_b1,datac1...
data_a2,data_b2,datac2...
.
.
.

但我无法将相同的字符串写入文件——它只会变成一行(请参阅下面的循环,尝试1)

data_a,data_b,data_c,data_a1,data_b1,datac1,data_a2,data_b2,datac2...

我想我正在寻找一种方法,在FileWriter或BufferedWriter循环中,将字符串finalDataA转换为数组字符串(即包括字符串后缀[0]),但我还没有找到这样一种方法,不会给出类型“不能”的错误将String转换为String[]”。有什么建议吗?

    String data = "";
    String dataHelper = "";
    try {
        URL myURL = new URL(url);
        HttpURLConnection myConnection = (HttpURLConnection) myURL.openConnection();
        if (myConnection.getResponseCode() == URLStatus.HTTP_OK.getStatusCode()) {
            BufferedReader in = new BufferedReader(new InputStreamReader(myConnection.getInputStream()));

            while ((data = in.readLine()) != null) {
                     dataHelper = dataHelper + "\n" + data;
            }
            in.close();

            String trimmedData = dataHelper.trim().replaceAll(" +", ",");
            String parts[] = trimmedData.split(Pattern.quote(")"));// ,1.,");
            String dataA = parts[1];
            String finalDataA[] = dataA.split("</PRE>");
            // parts 2&3 removed in this example

            // Console output for testing purpose - This prints out many many lines of csv-data
            System.out.println(finalDataA[0]);
            //This returns the value 1
            System.out.println(finalDataA.length);

            // Attempt no. 1 to write to file - writes a oneliner
            for(int i = 0; i < finalDataA.length; i++) {
                try (BufferedWriter bw = new BufferedWriter(new FileWriter(pathA, true))) {
                    String s;
                    s = finalDataA[i];
                    bw.write(s);
                    bw.newLine();
                    bw.flush();
                }
            }

            // Attempt no. 2 to write to file - writes a oneliner
            FileWriter fw = new FileWriter(pathA);
            for (int i = 0; i < finalDataA.length; i++) {
              fw.write(finalDataA[i] + "\n");
            }
            fw.close();

        }
    } catch (Exception e) {
        System.out.println("Exception" +e);
}

共有2个答案

澹台阳秋
2023-03-14

在代码注释中,finalDataA有一个元素,因此for循环只执行一次。尝试将finalDataA[0]拆分为行。比如:

    String endOfLineToken = "..."; //your variant
    String[] lines = finalDataA[0].split(endOfLineToken)
    BufferdWriter bw = new BufferedWriter(new FileWriter(pathA, true));
    try 
    {
       for (String line: lines)
       {
           bw.write(line);
           bw.write(endOfLineToken);//to put back line endings
           bw.newLine();
           bw.flush();
       }
    }
    catch (Exception e) {}
贡烨烁
2023-03-14

for循环之前创建BufferedWriterFileWriter,而不是每次都围绕它。

 类似资料:
  • 问题内容: 如何将经典字符串转换为f字符串? 输出: 所需的输出: 问题答案: f字符串是 语法 ,而不是对象类型。您不能将任意字符串转换为该语法,该语法会创建一个字符串对象,而不是相反。 我假设您想用作模板,因此只需在对象上使用方法: 如果要提供可配置的模板服务,请创建一个包含所有可以插值的字段的名称空间字典,并与调用语法一起使用以应用名称空间: 然后,用户可以在字段中的名称空间中使用任何键(或

  • 问题内容: 是否可以将模板字符串创建为常规字符串 然后将其转换为模板字符串 没有,以及其他动态代码生成方式? 问题答案: 由于您的模板字符串必须动态地(在运行时)引用该变量,因此答案是: 否,没有动态代码生成是不可能的。 但这很简单:

  • 问题内容: 我有一个,我需要一个。如何从一个转换为另一个? 问题答案: 好问题。我有以下五种 6种方法可以做到这一点。 注意:返回。因此有效地两者是相同的。 调用,这又设置了数组。 另一方面,调用以下程序包私有构造函数。 从源代码中的Java 8的源代码 因此似乎是最有效的方法,在这两个存储器和速度方面,用于转换char到String。

  • 问题内容: Oracle Java Community网站上的一篇文章提供了以下方法作为示例(对于JPA Converter,但这并不相关): 将String y强制转换为String val有什么用?有正当的理由吗? 原始文章:JPA的新增功能 问题答案: 这样的转换是完全没有必要的。我可以想象那是以前 但是后来参数类型更改为,而作者只是忘了删除强制类型转换。

  • 问题内容: 如何在不使用?的情况下逐行读取文本文件的内容? 例如,我有一个文本文件,里面看起来像这样: 我想创建两个,然后使用类似这样的东西 这样,它分配的价值,以及价值。 问题答案: 您应该使用。 然后,您可以从下一个索引中访问列表的一个特定元素: 这将给您第一行(即:Purlplemonkeys)

  • 问题内容: 我正在努力将字符串转换为元组而不在此过程中拆分字符串的字符。有人可以建议一种简单的方法来做到这一点。需要一个衬板。 失败 作品 由于我的输入是字符串,因此我尝试了以下代码,将字符串转换为列表,该列表再次将字符串拆分为字符.. 失败 预期产量: 产生的输出: 问题答案: 你可以做。无需使用功能。(请注意,逗号是必需的。) 从本质上讲,是指做出的一个元组 内容 的,不只是由一个元组本身。字