在我创建的Java程序中创建文件之前,如何创建/修改文件的内容?

时间:2013-12-25 00:09:05

标签: java eclipse file java-io

嘿,这是我的代码,我创建了一个简单的文件创建程序,因为我过去2天只使用过java。我只有13岁,所以请简单:)

import java.io.File;
import java.io.IOException;
import java.util.Scanner;

public class Filecreator 
{
    public static void main( String[] args )
    {   
        Scanner read = new Scanner (System.in);
        String y;
        String u;


        try {
            System.out.println("Please enter the name of your file!");

            y = read.next();

            while (y.contains(".") || y.contains(",") || y.contains("{") || y.contains("}") || y.contains("@")){
                System.out.println("Your Filename contains an incorrect character you may only use Number 0-9 And Letters A-Z");
                System.out.println("Please Re-enter your file name");

                y = read.next();          
            }

            System.out.println("Please enter the file type name");

            u = read.next();

            while (u.contains(".") || u.contains(",") || u.contains("{") ||     u.contains("}") || u.contains("@") ){
                System.out.println("Your File-type name contains an incorrect character      you may only use Number 0-9 And Letters A-Z");
                System.out.println("Please Re-enter your file-type name");

                u = read.next();
            }


            File file = new File( y + "." + u );


            if (file.createNewFile()){
                System.out.println("File is created!");
            System.out.println("The name of the file you have created is called " + y +   file);
            }else{
                System.out.println("File already exists.");
            } 
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

如果在Eclipse等程序上运行它,您将看到输出。但我希望能够在最终选择名称和文件类型之前编辑[文件]内容,然后保存它。无论如何我能做到吗?谢谢 - 乔治

3 个答案:

答案 0 :(得分:1)

目前,您正在将所有内容打印到控制台 - 这是在使用System.out.println(...)时完成的。

您可以做的是将输出写在其他地方。你怎么能这样做?最简单的方法是使用StringBuilder:

http://docs.oracle.com/javase/7/docs/api/java/lang/StringBuilder.html

这是一个代码示例:

StringBuilder sb = new StringBuilder();
sb.append("one ");
sb.append("two");
String output = sb.toString(); // output contains string "one two"

现在您将整个输出放在一个字符串中。如果您查看StringBuilder文档(链接在上面),您可以看到有其他有用的方法,如插入或删除,可以帮助您在将其转换为字符串之前修改输出(使用toString方法)。完成所有修改后,您可以将此字符串写入文件。

为了将String写入文件,这可能会有所帮助:

How do I save a String to a text file using Java?

如果您正在编写小文件(最多几MB),这就足够了。如果要编写更大的文件,则在将其写入文件之前,不应将整个字符串存储在内存中。在这种情况下,您应该创建较小的字符串并将其写入文件。有一个很好的教程:

http://www.mkyong.com/java/how-to-write-to-file-in-java-bufferedwriter-example/

答案 1 :(得分:0)

在创建文件之前无法编辑文件。您可以在创建文件后对要写入文件的数据进行更改;既然你控制了这些数据和文件的创建,就没有问题。

答案 2 :(得分:0)

读取行,直到该行包含特殊的文件结束标记。例如,旧的unix程序'mail'追加所有行,直到由单个''组成的行。正在阅读。

// insert this before reading the filename
StringBuilder content = new StringBuilder();

s = read.next();

     while( !s.equals(".")) {
         content.append(s);
         content.append(String.format("%n"));
         s = read.next();
    }

看看这个:write a string into file(比其他答案更好的答案)并将其用作如何在创建文件后将内容实际写入文件的示例。





P.S。

专业提示:我确定您已经注意到您已经重复完全相同的行以检查文件名是否有效。一个优秀的程序员也会注意到这一点并“提取”一个在一个地方执行逻辑的方法。

示例:

boolean isValidFilename( String s ) {
    return !(y.contains(".") || y.contains(",") || y.contains("{") || y.contains("}") || y.contains("@")));
}

然后您可以替换支票;

while (!isValidFilename( u )){
    System.out.println("Your File-type name contains an incorrect character...etc");
}         

这很好,因为你不必重复棘手的代码,这意味着有更少的地方可以做错误。顺便说一句,否定(!)是为了避免否定名称(invalid = true),因为你可能会结束使用它们时出现双重否定(非无效=真),这可能有点令人困惑。