日期:2014-05-20  浏览次数:20812 次

我想用IO库将转换代码风格
通过IO库将
Java code

public class Test
{
   public static void main(String[] args)
   {
      //Some statements
   }
}

改成
Java code

public class Test{
   public static void main(String[] args){
      //Some statements
   }
}

下面是我写的代码
Java code

package ex09;
import java.io.*;
import java.util.*;
import javax.swing.JFileChooser;

public class ex09_16 {

    /**
     * @param args
     */
    public static void main(String[] args) throws Exception{
        // TODO 自动生成方法存根
        JFileChooser fileChooser=new JFileChooser();
        if(fileChooser.showOpenDialog(null)
                ==JFileChooser.APPROVE_OPTION){
            File sourceFile=fileChooser.getSelectedFile();
        
        
            Scanner input=new Scanner(sourceFile);
            PrintWriter output=new PrintWriter(sourceFile);
            while(input.hasNext()){
                while(input.next().equals("{")){
                    output.println("\r{");
                }
            }
            input.close();
            output.close();
        }
        
    }

}


每次运行后我选的文件后就变为空,里面什么都没有了
不知道哪里不对

------解决方案--------------------
PrintWriter

public PrintWriter(File file)
throws FileNotFoundException
使用指定文件创建不具有自动行刷新的新 PrintWriter。此便捷构造方法创建必要的中间 OutputStreamWriter,后者将使用此 Java 虚拟机实例的默认 charset 进行字符编码。
参数:
file - 作为此 writer 的目标使用的文件。如果存在该文件,则将其大小截取为零;否则,创建一个新文件。将输出写入文件中,并对其进行缓冲处理。
抛出:
FileNotFoundException - 如果给定的文件对象不表示现有的可写常规文件,并且无法创建该名称的新常规文件,或者在打开或创建文件时发生其他一些错误
SecurityException - 如果存在安全管理器,并且 checkWrite(file.getPath()) 拒绝对文件进行写入访问。
从以下版本开始:
1.5

建议楼主多看API,文件内容清空的问题应该明白了。
所以格式化后的代码放到了当前目录下的同名文件中。
代码的逻辑好像也有问题,下面是我写的一段示例代码,楼主可以参考参考。
Java code

import java.io.*;
import java.util.*;
import javax.swing.JFileChooser;

public class Main {

    private static final String NONE = "NONE";//当读取的第二行没有时,设置为该字符串
    
    public static void main(String[] args) throws Exception {
        JFileChooser fileChooser = new JFileChooser();
        if (fileChooser.showOpenDialog(null) == JFileChooser.APPROVE_OPTION) {
            File sourceFile = fileChooser.getSelectedFile();

            Scanner input = new Scanner(sourceFile);
            PrintWriter output = new PrintWriter(new File(sourceFile.getName()));
            
            //每次都去读两行(如果第二行没有的话,就设置为"NONE")
            String first = "";//保存读取到的第一行
            String second = "";//保存读取到的第二行
            input.useDelimiter("\r\n");//设置分割符为换行。默认情况下该分隔符模式与空白匹配
            while (input.hasNext()) {
                first = input.next();//读取第一行
                if(input.hasNext()) {//如果第二行存在的话,读取第二行
                    second = input.next();
                } else {//如果没有第二行,就设置为"NONE"
                    second = NONE;
                }
                
                //如果第二行为"{",就把第二行加到第一行后面写到文件中
                if(second.trim().equals("{")) {
                    output.println(first + second);
                } else {//否则的话,先输出第一行,如果第二行存在的话,接着输出第二行
                    output.println(first);
                    if(!second.equals(NONE)) {
                        output.println(second);
                    }
                }
            }
            input.close();
            output.close();
        }

    }

}