2017-10-12 156 views
0

我正在創建以下程序,該程序讀取text.file並根據給出的參數打印出某些內容。如果用戶輸入「運行配置文件text.txt」,我希望它逐行輸出文件。如果用戶輸入「運行配置文件text.txt 5」,則應打印出前5行。我有以下程序寫:用Java讀取.txt文件?

import java.util.*; 
import java.io.*; 

public class Profile{ 

    public static String file; 
    public static int len; 
    public static Profile a; 
    public static Profile b; 

    //Method to read whole file 
    static void wholeFile(String file){ 
    Scanner in = new Scanner(file); 
    int lineNumber = 1; 

    while(in.hasNextLine()){ 
     String line = in.nextLine(); 
     System.out.println("/* " + lineNumber + " */ " + line); 
     lineNumber++; 
    } 
    in.close(); 
    } 

    //Method to read file with line length 
    static void notWholeFile(String file, int len){ 
    Scanner in = new Scanner(file); 
    int lineNumber = 1; 

    while(in.hasNextLine() && lineNumber <= len){ 
     String line = in.nextLine(); 
     System.out.println("/* " + lineNumber + " */ " + line); 
     lineNumber++; 
    } 
    in.close(); 
    } 

Profile(String file){ 
    this.file = file; 
} 
Profile(String file, int len){ 
    this.file = file; 
    this.len = len; 
    notWholeFile(file, len); 
} 
    public static void main(String[] args){ 
    Scanner in = new Scanner (System.in); 
    if (args.length == 1){ 
     file = args[0] + ""; 
     a = new Profile(file); 
     wholeFile(file); 
    }  
    if (args.length == 2){ 
     file = args[0] + ""; 
     len = Integer.parseInt(args[1]); 
     b = new Profile(file, len); 
     notWholeFile(file, len); 
    } 
    } 
} 

出於測試目的,我已包括的「的text.txt」的名稱,它包含以下文本在我的目錄中的.txt文件:

blah blah blah blah blah blah blah 
blah blah blah blah blah blah blah 

blah blah blah blah blah blah blah 
blah blah blah blah blah blah blah 

blah blah blah blah blah blah blah 
blah blah blah blah blah blah blah 

blah blah blah blah blah blah blah 
blah blah blah blah blah blah blah 

我是一名java初學者,但相信不應該有任何錯誤。然而,當我輸入「運行配置文件的text.txt 5」,我得到下面的輸出:

> run Profile text.txt 5 
/* 1 */ text.txt 
/* 1 */ text.txt 
> 

爲什麼我不能得到「等等等等」的行打印出來?我閱讀.txt文件的方式有錯誤嗎?我如何訪問此文本文件中的行?任何建議都會有幫助。

+3

這是調試的時間。一個建議,用'Main'類分開'Profile'類,將'Profile a,b'移到局部變量 –

+0

我不明白這兩個'Profile'構造函數的用途,因爲它們似乎沒有被使用。 – Bazinga

+0

我敢肯定,您的掃描儀讀取字符串文件,而不是實際的文件。也從構造函數 – Karthikeyan

回答

3

您正在掃描文件的名稱,而不是文件的內容。那就是:

Scanner in = new Scanner(file); // where file is of type string 

創建ScannerString本身讀取。試試類似:

Scanner in = new Scanner(new File(file)); 

這應該讀取文件的內容。