2015-08-25 5 views
7
public static void main(String[] args) throws IOException 
{ 
    Scanner in = new Scanner(System.in); 
    String fileName = in.nextLine(); 

    Writer out = new BufferedWriter(new OutputStreamWriter(
      new FileOutputStream("C:/temp/"+fileName+".txt"), "UTF-8"));//Ex thrown 
    out.close(); 
} 

मैं एक लेखक बनाने की कोशिश कर रहा हूं जो चीनी वर्णों को फ़ाइल नाम से संभाल सकता है। इसलिए मैं उदाहरण के लिए 你好.txt नामक फ़ाइल बना सकता हूं।चीनी वर्णों को एक फ़ाइल नाम

हालांकि मुझे उपरोक्त कोड के साथ FileNotFoundException मिलता है, यह अंग्रेज़ी वर्णों के लिए बिल्कुल ठीक काम करता है लेकिन चीनी वर्णों के साथ नहीं।

मैंने उपरोक्त कोड का उत्पादन करने के लिए यहां दिए गए उत्तरों का पालन किया: How to write a UTF-8 file with Java? लेकिन यह काम नहीं करता है।

कोई भी जानता है कि मैं इसे कैसे पूरा कर सकता हूं?

स्टैक ट्रेस: ​​

Exception in thread "main" java.io.FileNotFoundException: C:\temp\??.txt (The filename, directory name, or volume label syntax is incorrect) 
    at java.io.FileOutputStream.open0(Native Method) 
    at java.io.FileOutputStream.open(Unknown Source) 
    at java.io.FileOutputStream.<init>(Unknown Source) 
    at java.io.FileOutputStream.<init>(Unknown Source) 

NIO का उपयोग करना:

Path path = Paths.get("C:/temp/"+fileName+".txt");//throws ex 
Charset charset = Charset.forName("UTF-8"); 
Path file = Files.createFile(path); 
BufferedWriter bufferedWriter = Files.newBufferedWriter(file, charset); 
bufferedWriter.close(); 

ढेर:

Exception in thread "main" java.nio.file.InvalidPathException: Illegal char <?> at index 8: C:/temp/?.txt 
    at sun.nio.fs.WindowsPathParser.normalize(Unknown Source) 
    at sun.nio.fs.WindowsPathParser.parse(Unknown Source) 
    at sun.nio.fs.WindowsPathParser.parse(Unknown Source) 
    at sun.nio.fs.WindowsPath.parse(Unknown Source) 
    at sun.nio.fs.WindowsFileSystem.getPath(Unknown Source) 
    at java.nio.file.Paths.get(Unknown Source) 
+1

मेरा मानना ​​है कि यह ओएस-निर्भर है। ओएस का नियंत्रण फाइल नामों के रूप में तारों को अनुमति देने योग्य हैं। आप कौन सा ओएस उपयोग कर रहे हैं? अनुलेख ओएस की विशेष रूप से परवाह नहीं है कि फ़ाइल के डेटा में बाइट क्या हैं; यह उन ऐप्स पर निर्भर करता है जो फ़ाइलों को पढ़ते हैं। यही कारण है कि जिस लिंक का आपने अनुसरण करने का प्रयास किया वह आपकी मदद नहीं करेगा। – ajb

+0

क्या आप कृपया स्टैकट्रेस प्रदान कर सकते हैं? –

+0

@TAsk जोड़ा गया स्टैक ट्रेस और एसएससीई में संकेत दिया गया है जो लाइन – Aequitas

उत्तर

5

मुझे पता चला है कि इस समस्या को ग्रहण सांत्वना की वर्ण एन्कोडिंग से संबंधित है और Java से संबंधित नहीं है।

मैं एक ही कोड का उपयोग किया Run Configuration अलग तरह से इस्तेमाल किया के रूप में नीचे दिखाया गया है,

enter image description here

अब मैं अपने कंसोल में उत्पादन निम्नलिखित गया कार्यक्रम चलाने के बाद,

Exception in thread "main" java.io.FileNotFoundException: C:\temp\??.txt (The filename, directory name, or volume label syntax is incorrect) 
    at java.io.FileOutputStream.open(Native Method) 
    at java.io.FileOutputStream.<init>(FileOutputStream.java:206) 
    at java.io.FileOutputStream.<init>(FileOutputStream.java:95) 
    at Test.main(Test.java:21) 

निष्कर्ष: यहां ISO-8859-1 रन कॉन्फ़िगरेशन में एन्कोडिंग Scanner उन वर्णों को कंसोल से ठीक से पढ़ने में सक्षम नहीं होंगे क्योंकि कंसोल में अलग-अलग वर्ण एन्कोडिंग हैं और आपके पास ??filename के रूप में होगा।

कृपया अपने कंसोल के लिए वर्ण एन्कोडिंग बदलें, मुझे दृढ़ विश्वास है कि आप कुछ आईडीई का उपयोग कर रहे हैं। हो सकता है कि आप बदल गए हों या आपके कंसोल को कैरेक्टर एन्कोडिंग विरासत में मिला हो जो कि उन अक्षरों को एन्कोड करने का अनुमान नहीं है।

+0

मैं ISO8859 के लिए बदल दिया और यह अभी भी – Aequitas

+1

काम नहीं करता ओह मैं गलत समझा आप क्या मतलब, Cp1252 क्या मैं मूल रूप से किया था, और UTF-8 फिक्स यह – Aequitas

+1

@TAsk बहुत अच्छा पकड़ करने के लिए इसे बदलने हां है! – chrylis

संबंधित मुद्दे