无法将数据写入文件

时间:2016-04-05 16:33:06

标签: java

我是这个网站的新手,java和通用编程。你说我是一个总菜鸟。所以这是我的问题: 我刚刚开始处理文件,所以我尝试了各种各样的练习。说我想在文件中写下很多数字。如果我使用此代码,一切正常:

private Event nvcToCoreEvent(NameValueCollection nvc)
{
    Func<string, string> getBinderKey = delegate (string originalKey)
    {
        IList<string> keyParts = new List<string>();

        // Capture anything between square brackets.
        foreach (Match m in Regex.Matches(originalKey, @"(?<=\[)(.*?)(?=\])"))
        {
            int collectionIndex;
            if (int.TryParse(m.Value, out collectionIndex))
            {
                // Preserve what should be actual indexer calls.
                keyParts[keyParts.Count - 1] += "[" + m.Value + "]";
            }

            else
            {
                keyParts.Add(m.Value);
            }
        }

        // Format the key the way the default binder expects it.
        return string.Join(".", keyParts);
    };

    // Convert the NameValueCollection to a FormDataCollection so we use it's magic sauce.
    FormDataCollection formData = new FormDataCollection(nvc.AllKeys.Select(x => new KeyValuePair<string, string>(getBinderKey(x), nvc[x])));

    // Internally this actually uses a model binder to do the mapping work!
    return formData.ReadAs<Event>();
}

使用所有预期的数字创建newFile.txt。 但是如果使用这段代码来编写从0到9的随机选择的数字,

    int value = 0;
    int max = 10000;
    try {
        FileWriter wr = new FileWriter("newFile.txt");
        for (int i = 0; i < max; i++){
            value = i;
            wr.write(value + " ");
        }
        wr.close();
    } catch (Exception e){
        println(e);
    }

创建了newFile.txt但填充了&lt;&lt; ‱‷‱‰'‱'``‰'‸‸'`‸‸‰```````&gt;。

请注意,RandomGenerator是一个来自acm包的类 - 我的学习书在示例中使用的包。

我尝试过不同的类,如BufferedWriter和PrintWriter,但我得到了相同的输出。

那么,我在这里错过了什么吗?我真的无法弄明白。

谢谢。

编辑:感谢您的快速回复。我已经尝试通过 int value = 0; int max = 10000; try { FileWriter wr = new FileWriter("newFile.txt"); for (int i = 0; i < max; i++){ value = RandomGenerator.getInstance().nextInt(0,9); wr.write(value + " "); } wr.close(); } catch (Exception e){ println(e); } System.out.println一起获得输出。屏幕输出是预期的,但文件输出不是。 虽然发生了一些更奇怪的事情:我再次运行它但范围从0到10.我改变的唯一一件事是这一行:

wr.write

现在newFile.txt正如预期的那样..任何想法为什么都是??

感谢名单

2 个答案:

答案 0 :(得分:1)

我认为您的代码没有任何问题。

略有改动的版本,无需随机库即可使用:

int max = 10000;
Random random = new Random();

try(FileWriter wr = new FileWriter("newFile.txt")) {
    for (int i = 0; i < max; i++){
        int value = random.nextInt(9);
        wr.write(value + " ");
    }
} catch (Exception e){
    e.printStackTrace();
}

当我运行上述内容时,我得到了预期的文件,其中包含大量从0到8的数字。

如果您的随机库确实返回了int,那么即使在错误的范围内,也一定要在文件中获取数字。

问题可能在于您可视化文件?它可能是编码,因为此代码使用您平台的默认编码(导致此问题可能非常奇怪)。

尝试将其用作编写器以确保使用UTF-8编写文件:

try(OutputStreamWriter wr = new OutputStreamWriter(
        new FileOutputStream("newFile.txt"), "UTF-8")) {

答案 1 :(得分:-1)

Class::XSAccessor: invalid instance method invocant: no hash ref supplied at