有沒有一種簡單的方法來查看特定文件是否具有DOS/MAC/UNIX行尾?在Java/DOS-UNIX中獲取文件格式
目前我讀到字節的文件字節和停止,如果我看到的Windows回車
for (byte thisByte : bytes) {
if ((!isDos) && (thisByte == 13)) {
isDos = true;
}
...
有沒有辦法得到相同的信息,而無需通過字節讀取文件字節?
有沒有一種簡單的方法來查看特定文件是否具有DOS/MAC/UNIX行尾?在Java/DOS-UNIX中獲取文件格式
目前我讀到字節的文件字節和停止,如果我看到的Windows回車
for (byte thisByte : bytes) {
if ((!isDos) && (thisByte == 13)) {
isDos = true;
}
...
有沒有辦法得到相同的信息,而無需通過字節讀取文件字節?
可能的優化可能是僅查看文件的最後一個或兩個字節。由於許多文本文件都以一行結束,因此大多數情況下都可以工作。如果你沒有發現在那裏結束的行,那麼你將不得不逐漸回退到字節。
順便說一句,你的示例代碼將isDos設置爲true,而不檢查下一個字符是否爲十進制10.如果它不是10,那麼它可能是MAC文件格式。
這是有效的。在我的小世界裏,只有DOS或UNIX格式可能會出現,我將作出更改以使代碼更通用幷包含MAC。爲了您的評論。 – JAM 2010-06-16 17:43:47
如果你知道一個文件只使用一種行尾,那麼你可以掃描第一個換行符,看看它是否是DOS/UNIX/Mac。
沒錯。這是我現在正在做的,在逐行讀取文件之後。我想知道是否有一種更簡單,更優雅的方式來獲取相同的信息 – JAM 2010-06-16 17:32:49
從您的代碼看,如果它不是DOS,那麼它就會讀取整個文件。 – 2010-06-16 18:00:33
假設它是一個文本文件,並且這些行是「合理」的長度,您可以讀取該文件的一個大塊(比如說4096字節),然後掃描該塊的CR字符。
但是,否則,不可以,在文件中查找字符的唯一方法是實際讀取整個文件並查找字符。
假設你問這個問題是因爲你一次讀取一個字節時出現性能問題:確保你用BufferedInputStream
包裝FileInputStream
。
謝謝。你能提供一個閱讀文件的一部分的例子嗎?或者,你的意思是「讀完4096字節後停止讀取嗎?」) – JAM 2010-06-16 17:41:00
請注意,在CR(''\ r''或'13')上停止不區分Mac和DOS。你需要看下一個字符來判斷它是Mac還是DOS - 如果它是換行符(''\ n''),那麼你有DOS;如果不是,那就是Mac;如果你在CR之前遇到過換行,那麼你有Unix。這是最低限度的檢查。 – 2015-09-15 18:03:34