试图改变java中的文本文件

时间:2013-11-27 13:02:13

标签: java arraylist compiler-errors split

这是我的代码:

import java.util.Scanner;
import java.io.*;
import java.util.ArrayList;

public class Filter{ 

    Message myMessage;
    Scanner input;
    Scanner input2; 
    String sender;  
    String subject;
    String emailMIN;
    String line;
    String line2;
    ArrayList<String> blacklist = new ArrayList<String>();
    ArrayList<String> keywords = new ArrayList<String>();
    ArrayList<String> subjectWords = new ArrayList<String>();
    ArrayList<String> emails = new ArrayList<String>();
    //String[] lines;
    File SpamMessage;
    File inFile;
    File inFile2;
    File  tempFile;
    String[] lines;



    public Filter(Message m,String blacklistFile, String keywordFile, String Spam)throws IOException{
            inFile = new File(blacklistFile);
            inFile2 = new File(keywordFile);  
            input = new Scanner (inFile);
            input2 = new Scanner (inFile2);
                                                                                                  myMessage =m;
            SpamMessage=new File(Spam);
    }


    public void filter() throws IOException{
            PrintWriter output = new PrintWriter(SpamMessage);
            while(input.hasNextLine()){
                    line = input.nextLine();
                    //System.out.println(line);
                    if(line!=null)
                           blacklist.add(line);
            }       
            while(input2.hasNextLine()){
                    line2 = input2.nextLine();
                    //System.out.println(line2);
                    if(line!=null)
                            keywords.add(line2);
            }

            emails=myMessage.getEmails();
    //      System.out.println(emails.size() + emails.get(1));
            for(int i = 0; i < emails.size(); i++){
    //              boolean isSpam = false;
                    lines = emails.get(i).split("\n");
    //              System.out.println(lines[5] + lines[7]);
                    sender = lines[2].substring(lines[2].indexOf('<'), lines[2].indexOf('>'));
    //`             System.out.println(sender);
                    emailMIN = lines[6].substring(lines[6].indexOf('<'), lines[6].indexOf('>'));
    //              System.out.println(emailMIN);
                    for(int j =0; j<lines.length; j++)
                    {
                            if(j==2)
                            {
                                    for(String blacklist2: blacklist)
                                    {
                            //              System.out.println(blacklist2);
                                            if(lines[j].contains(blacklist2))
                                            {
                                           output.println(emailMIN);
                                            }
                            //              output.close();
                                    }
                            }
                            if(j==5 || j>=7)
                            {
                            //      System.out.println(keywords.size());
                                    for(String keywords2: keywords)
                                    {
                            //              System.out.println(keywords2);
                                            if(lines[j].contains(keywords2))
                                            {
                                                    output.println(emailMIN);
                                            }
                                    //      output.close();
                                    }
                            }
                    //addKeywords();
            }

    }
    output.close();
    addKeywords();
    }

    public void addKeywords() throws IOException
    {
            tempFile = new File("tempFile.txt");
            PrintWriter pw = new PrintWriter(new FileWriter(tempFile));

            for(int i=0; i<lines.length; i++)
            {
                    if(i==5){
                            String[] words = lines[i].split(" ");
                            for(String word: words){
                                    if(word.length()>=6){
                                            subjectWords.add(word +"\n");
                                            //System.out.println(subjectWords);
                                    }
                            }               
                            keywords.addAll(subjectWords);
                            pw.println(keywords);

                    }
            }               
            pw.close();
            if (!inFile2.delete()) {
                    //System.out.println("Could not delete file");
                    return;
            }               

    // Rename the new file to the filename the original file had.
            if (!tempFile.renameTo(inFile2)){
                    //System.out.println("Could not rename file");
            }
    }
}

我正在尝试更新关键字txt文件中的单词列表,现在它确实更新了它,但它将其放入格式[generic,pharmacy,little,inside]

这是错误的,因为如果我再次运行我的代码,它正在搜索文件是否包含[通用,药房,小,内部]我需要它来搜索每个单词而不是加号逗号或大括号。所以基本上我希望它以像这样的列表格式复制单词

generic
pharmacy
little
inside 

这样就可以搜索每个单词。我想出了如何做这个部分。现在,如何将发件人添加到其他文本文件?还有一种方法可以修改它,所以它不会两次添加相同的关键字吗?感谢

3 个答案:

答案 0 :(得分:0)

这是因为您正在向该文件写入一个数组,这会导致调用它的toString方法。写下每一个项目。

而不是pw.println(keywords);

执行:

for (String keyword : keywords)
 { 
   pw.println(keyword.trim());
 } 

或者,如果每个单词都包含\ n,那么这应该有效

for (String keyword : keywords)
 { 
   pw.print(keyword);
 } 

答案 1 :(得分:0)

而不是:

pw.println(keywords);

你应该循环遍历数组并单独添加每一行。

for(int i = 0; i < keywords.length; i++) {
    pw.println(keywords[i]);
}

答案 2 :(得分:0)

那是因为您正在打印ArrayList对象。在你的代码中,keywords是List的实例,你会给你一个[aa,bb]的输出。除此之外你会得到重复的单词,因为这些列表实例是类变量,并打印在循环中

 keywords.addAll(subjectWords);
 pw.println(keywords);

您可以在for循环之外循环keywords或在添加到列表之前打印word