2015-06-10 108 views
0

我對Java還是很新的,只有一個學期。我有我的第一次實習,這不是一個編程實習,只是一個通用的IT實習,因爲這只是我的第一個學期。 我的老闆不瞭解Java,在大樓裏也沒有人。他知道我有一些基本的編程經驗,並告訴我要解決他遇到的問題。他有一個保存的報告,最後一行,報告的最後一個字符是一個字符轉彎符號,我們需要刪除它,因爲它給了我們網站上的問題。 我不確定我是否在正確的軌道上,在這一點上,我只是在做試驗和錯誤。請幫忙:DJAVA幫助:追加文件並刪除最後一個字符

public class RemoveChar { 

    public static void main(String[] args) throws FileNotFoundException { 

    // Variables and stuff 
    Scanner keyScan = new Scanner(System.in); 
    JFrame frameOne = new JFrame ("File Name"); 
    Scanner fileScan = new Scanner(System.in); 
    String fileName; 

    // Ask user for file name 
    System.out.print("What is the file full file name? "); 
    fileName = fileScan.nextLine(); 

    // Add .txt if the user forgets to put it in the prompt 
    if (!fileName.contains(".txt")) 
     fileName += ".txt"; 

    //Test to see if file exists 
    File myFile = new File(fileName); 
    if(!myFile.exists()){ 
     System.out.println(fileName + " does not exist. "); 
     System.exit(0); 
    } 

    fWriter = new FileWriter("config/lastWindow.txt", true); 
    /*while(fileName.hasNext()){ 

    } 
    File 
    BufferedReader inputFile = new BufferedReader(new FileReader("C:\\" +  fileScan)); 
    //Scanner reader = new Scanner (inputFile); 
    */ 



    } 

} 

回答

2

這個文件有多大?如果他們沒有那麼大,你可以將整個文件讀入一個字符串,然後砍掉最後一個字符:

//Set delimiter to end-of-string anchor \Z so that you can read the 
//file in with just one call to next() 
//from: http://stackoverflow.com/a/3403112/263004 

String content = new Scanner(new File("filename")).useDelimiter("\\Z").next(); 
String withoutLastCharacter = content.substring(0, content.length - 1); 

然後你只需要編寫withoutLastCharacter到文件中。

否則,您需要逐行讀入原始文件並將其寫入臨時文件,然後將該文件複製到原始文件上。然而,如果你在最後一行,你會砍掉最後一個字符。以下是一些代碼,可以讓您瞭解基本邏輯:

while(scanner.hasNextLine()) { 
    String line = scanner.nextLine(); 

    //If this is the last line chop off the last character. 
    if(!scanner.hasNextLine()) { 
     line = line.substring(0, line.length - 1); 
    } 

    //Write line out to temporary file 
    ... 
} 

您還提到它不一定是Java。如果你在Linux或Mac,你可以做到這一點與sed

sed -i '$s/.$//' <filename> 

這將刪除文件的最後一行的最後一個字符。

1

這是否是java問題?對於像這樣的基本文件/字符串操作,我更喜歡使用類似Perl的東西。下面的perl腳本會從文件

my $fsize = -s $filename; 
    # print $size."\n"; 
    open($FILE, "+<", $filename) or die $!; 
    seek $FILE, $size-2, SEEK_SET; 
    print $FILE ";"; 

    close $FILE; 
+0

沒有刪除的最後一個字節(或字符在這種情況下),它並沒有爲Java的,只是想我會嘗試它,因爲我想不懈怠和盡我所能學習它。但如果一切都失敗了,我會繼續嘗試這個謝謝你的提示! –

+0

我喜歡Perl,但我認爲這是過度的。你可以像這樣使用'sed':'sed -i'$ s /.$//'':) –

+0

我相信Java相比於Perl來說是過量的,但我相信你是正確的,Perl對於sed –