2013-04-17 28 views
0

我有一个类叫做文件 位置,它存储文件的大小,名称,驱动器和目录。Tokenizer不分隔字符串? (JAVA)

该类应该将扩展名与文件名(“java”与“test.java”)分开,然后使用equals方法将其与另一个文件进行比较。尽管由于某种原因,它每次都会返回false。任何想法有什么不对?

类文件

import java.util.*; 

public class FileLocation 
{ 
    private String name; 
    private char drive; 
    private String directory; 
    private int size; 

    public FileLocation() 
    { 
     drive = 'X'; 
     directory = "OOProgramming\\Practicals\\"; 
     name = "test"; 
     size = 2; 
    } 

    public FileLocation(char driveIn, String dirIn, String nameIn, int sizeIn) 
    { 
     drive = driveIn; 
     directory = dirIn; 
     name = nameIn; 
     size = sizeIn; 
    } 

    public String getFullPath() 
    { 
     return drive + ":\\" + directory + name; 
    } 

    public String getFileType() 
    { 
     StringTokenizer st1 = new StringTokenizer(name, "."); 

     return "File type is " + st1.nextToken(); 

    } 

    public String getSizeAsString() 
    { 
     StringBuilder data = new StringBuilder(); 

     if(size > 1048575) 
     { 
      data.append("gb"); 
     } 
      else if(size > 1024) 
      { 
       data.append("mb"); 
      } 
       else 
       { 
        data.append("kb"); 
       } 

     return size + " " + data; 
    } 

    public boolean isTextFile() 
    { 
     StringTokenizer st2 = new StringTokenizer(name, "."); 

     if(st2.nextToken() == ".txt" || st2.nextToken() == ".doc") 
     { 
      return true; 
     } 
      else 
      { 
       return false; 
      } 
    } 

    public void appendDrive() 
    { 
     StringBuilder st1 = new StringBuilder(drive); 
     StringBuilder st2 = new StringBuilder(directory); 

     StringBuilder combineSb = st1.append(st2); 
    } 

    public int countDirectories() 
    { 
     StringTokenizer stDir =new StringTokenizer(directory, "//"); 
     return stDir.countTokens(); 
    } 

    public String toString() 
    { 
     return "Drive: " + drive + " Directory: " + directory + " Name: " + name + " Size: " + size; 
    } 

    public boolean equals(FileLocation f) 
    { 
     return drive == f.drive && directory == f.directory && name == f.name && size == f.size; 
    } 

} 

测试程序

import java.util.*; 

public class FileLocationTest 
{ 
    public static void main(String [] args) 
    { 
     Scanner keyboardIn = new Scanner(System.in); 

     FileLocation javaAssign = new FileLocation('X', "Programming\\Assignment\\", "Loan.txt", 1); 

     int selector = 0; 

     System.out.print(javaAssign.isTextFile()); 

    } 
} 
+1

你熟悉调试器?调试你的程序会比在这里发布它更快地告诉你什么是错误的...至少更快一点。 – Thihara

回答

0

这个代码将会给真实的,只有当文件是文档。

StringTokenizer st2 = new StringTokenizer(name, "."); 

    if(st2.nextToken() == ".txt" || st2.nextToken() == ".doc") 

如果文件名file.txt的,然后发生了什么

 (st2.nextToken() == ".txt") means ("file" == "txt") false 
     (st2.nextToken() == ".doc") means ("txt" == "txt") false 

第一令牌给文件名第二次令牌给了内线。

正确的代码是

 StringTokenizer st2 = new StringTokenizer(name, "."); 
    String filename = st2.nextToken(); 
    String ext = st2.nextToken(); 
    if(ext.equalsIgnoreCase(".txt") || ext.equalsIgnoreCase(".txt")) 

使用恒等于比较字符串不==

+0

谢谢,这个工作时,我删除了。从等于() – excedion

0

看看my own question我张贴了一段时间回来。我结束了使用Apache Lucene的标记器。

这里是你如何使用它(从here复制):

TokenStream tokenStream = analyzer.tokenStream(fieldName, reader); 
    OffsetAttribute offsetAttribute = tokenStream.addAttribute(OffsetAttribute.class); 
    CharTermAttribute charTermAttribute = tokenStream.addAttribute(CharTermAttribute.class); 

    while (tokenStream.incrementToken()) { 
     int startOffset = offsetAttribute.startOffset(); 
     int endOffset = offsetAttribute.endOffset(); 
     String term = charTermAttribute.toString(); 
    } 
+0

从Lucene为这样一个简单的任务添加依赖关系实在太过分了,恕我直言。 – Pino

+0

你说得对,我有点快速阅读这个问题。没有看到实际使用 – jelgh