簡體   English   中英

讀寫文本文件

[英]Read and Write Text File

想知道是否有任何方法可以從文本文件中讀取特定數據? 例如:

[2014年1月1日上午3:57](EmailDeliveryOptionsHome.getAddEmailDeliveryOptions [Connection at:MayConnectionPool]):遭遇異常 (java.sql.SQLException:ORA-12899:值太大而不適用於列“BGADMIN”。“TBLSTOPRINT_ACCT”。“EMAIL_ADDR”

我想閱讀他們所說的部分

EmailDeliveryOptionsHome.getAddEmailDeliveryOptions

但不是其余的,我真的不知道怎么寫程序不讀日期和[Connection at:...... EMAIL_ADDR。 我需要使用緩沖讀卡器嗎? 或者我也可以使用其他方法嗎?

public static void main(String[] args) {

        try
        {   File myFile = new File("system.txt");
            FileReader filereader= new FileReader(myFile);
            int len=(int)myFile.length();            
            char [] chars = new char[len];
            filereader.read(chars);
            for(int i=0; i<len; i++){
                System.out.print(chars[i]);
            filereader.close();
        }
        }

        catch(IOException e)
        {    System.out.print("Error performing file reading");
        }

此代碼讀取文本文件中的所有內容,如何修改文本文件以使其只讀取特定數據?

您可以查看Pattern類,因為您正在閱讀的內容似乎是某種定義的格式(模式),並且您總是在尋找可以提取的特定內容。

下面這個簡單的代碼應該做你想做的事情:

        String input = "[January 1, 2014 3:57 AM] (EmailDeliveryOptionsHome.getAddEmailDeliveryOptions [Connection at : MayConnectionPool]) : Exception Encountered | (java.sql.SQLException: ORA-12899: value too large for column \"BGADMIN\".\"TBLSTOPRINT_ACCT\".\"EMAIL_ADDR\"";
    Pattern p = Pattern.compile("\\[Connection at\\s*:\\s*([^\\]]+)");
    Matcher m  =p.matcher(input);
    if(m.find())
    {
        System.out.println(m.group(1));
    }

這會產生:

MayConnectionPool

這里可以找到這個正則表達式的簡單解釋。

這樣做的內容如下:

  • [字符是正則表達式語言中的特殊字符,因此必須在前面使用額外的\\來進行轉義。 像往常一樣,需要一個額外的\\來逃避Java。
  • Connection at將完全匹配這些字符
  • \\ s *將匹配0個或更多出現的空格字符( \\\\s
  • :將完全匹配
  • \\ s *將匹配0個或更多出現的空格字符( \\\\s
  • ([^\\\\]]+) :在正則表達式語言中,圓括號(分別為() )表示組捕獲。 這些括號之間的任何匹配都將被捕獲並在以后訪問時可用。 當您想要提取時 ,需要這些,而不僅僅是匹配給定字符串中的信息。 正則表達式中的[]表示您想要匹配的一組字符,因此[abc]將匹配abc ,沒有特定的順序。 但是,如果你有跟隨^字符的字符,那么效果相反意味着它將匹配不在方括號內的任何東西。 所以簡而言之, [^\\\\]]+是否會匹配( + )任何不是結束方括號( \\\\] )的字符的1次或多次重復。 匹配的任何內容都將放在我稍后訪問的組中。

這是我使用的快速但有點臟的方式:

使用此(或使用您自己的方法)來獲取文件內容:

Scanner s = new Scanner(new File("textfile.txt"));
String fileContent = "";
if(s.hasNextLine()) { // If multiline
    while(s.hasNext()) {
        fileContent += s.nextLine() + "\n";
    }
}else { // If only one line
    while(s.hasNext()) {
        fileContent += " " + s.next();
    }
    // Remove the first space
    fileContent = fileContent.trim();
}

要從文件中刪除您想要的數據,請使用:

String result = null;
String searchFor = "EmailDeliveryOptionsHome.getAddEmailDeliveryOptions";
if(fileContent.contains(searchFor)) {
result = fileContent.substring(
                fileContent.indexOf(searchFor), 
                fileContent.indexOf(searchFor) + searchFor.length());
}

現在,您將結果存儲在名為result的變量中,或者如果未找到,則result為null。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM