2011-12-06 71 views
17

Tôi đang cố gắng lấy tên của đối tượng File mà không có phần mở rộng của nó, ví dụ: nhận được "thảm thực vật" khi tên tệp là "vegetation.txt". Tôi đã thử triển khai mã này:Làm cách nào để lấy tên của đối tượng Tệp mà không có phần mở rộng của nó trong Java?

openFile = fileChooser.getSelectedFile(); 
String[] tokens = openFile.getName().split("."); 
String name = tokens[0]; 

Thật không may, nó trả về đối tượng null. Có một vấn đề chỉ trong việc xác định các đối tượng String, tôi đoán, bởi vì phương pháp getName() hoạt động chính xác; nó cho tôi tên của tập tin với phần mở rộng của nó.

Bạn có ý tưởng gì không?

Trả lời

36

Nếu bạn muốn thực hiện điều này cho mình, hãy thử này:

String name = file.getName(); 
int pos = name.lastIndexOf("."); 
if (pos > 0) { 
    name = name.substring(0, pos); 
} 

(biến thể này doesn' t để lại cho bạn với một chuỗi rỗng cho một tên tập tin đầu vào như ".txt". Nếu bạn muốn chuỗi để có sản phẩm nào trong trường hợp đó, thay đổi > 0->= 0.)


bạn có thể thay thế if tuyên bố với một bài tập sử dụng một biểu thức có điều kiện, nếu bạn nghĩ rằng nó làm cho mã của bạn dễ đọc hơn; xem câu trả lời của @ Steven chẳng hạn. (Tôi không nghĩ điều đó ... nhưng đó là vấn đề ý kiến.)


Có thể cho là nên sử dụng cách triển khai mà người khác đã viết và thử nghiệm. Apache FilenameUtils là một lựa chọn tốt; xem câu trả lời của @ slachnick, và cũng được liên kết Q & A.

+0

Cảm ơn rất nhiều vì đã giải quyết được vấn đề của tôi :) – MichalB

4

Tôi muốn cắt nhỏ trước chỉ mục cuối cùng của "." là tên tệp. Bằng cách này một tên file: hello.test.txt chỉ là hello.test

ví dụ:

int pos = filename.lastIndexOf("."); 
String justName = pos > 0 ? filename.substring(0, pos) : filename; 

Bạn cần phải xử lý có được không mở rộng quá.

2

Bạn có thể thử split("\\.");. Đó là, về cơ bản thoát khỏi . vì nó được coi là tất cả các ký tự trong regex.

2

Có hai vấn đề với mã của bạn ...

1) Chỉ cần sử dụng "" như một đối số để chia nhỏ đang được hiểu là một Rejex mà bạn không muốn. Bạn muốn có một dấu chấm đen. Vì vậy, bạn phải thoát khỏi nó ...

openFile.getName().split("\\."); 

2) Bạn sẽ phân tích cú pháp bất kỳ tệp nào có nhiều hơn một dấu chấm. Cách tốt nhất để làm điều này là để tìm kiếm các dấu chấm cuối cùng và nhận được chuỗi ...

int pos = openFile.getName().lastIndexOf("."); 
if(pos != -1) { 
    String name = openFile.getName().substring(0, pos); 
} 
17

Nếu bạn không muốn tự viết mã này, bạn có thể sử dụng số FilenameUtils của Apache.

FilenameUtils.getBaseName(openFile.getName()); 

Điều này sẽ trả lại tên tệp trừ đường dẫn và tiện ích.

Các vấn đề liên quan