solar os Ответов: 3

Чтение из файла и создание файла с этим именем


Код, считывающий слово из файла, создает файл с этим именем и записывает содержимое

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.List;

public class FileWriteHtmlWithFor
{     
   public static void main(String[] args)
    {
		BufferedWriter bw = null;
		FileWriter fw = null;                                 
                BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
                try
                {                                                       
                BufferedReader in = new BufferedReader(new java.io.FileReader("F:\\words.txt"));
                String str;                
                
                String fileName = "F:\\words.txt";
                
                
                List<String> Satellite = Files.readAllLines(Paths.get(fileName), Charset.defaultCharset());                
                               
                 
                for(String Ad : Satellite)
                {                      
                String FILENAME = "F:\\"+Ad+".html";                    
                try
                {
                System.out.print("Word: " + Ad);                 
                String French = reader.readLine();                 
                                                             
                System.out.print("WordA: ");
                String WordA = reader.readLine();
                
                System.out.print("WordB: ");
                String WordB = reader.readLine();
                
                System.out.print("WordC: ");
                String WordC = reader.readLine();
                
                System.out.print("WordD: ");
                String WordD = reader.readLine();    
                
                System.out.print("a: ");            
                String a = reader.readLine();   
                        
                System.out.print("b: ");
                String b = reader.readLine();   
            
                System.out.print("c: ");
                String c = reader.readLine();   
            
                System.out.print("d: ");
                String d = reader.readLine();  
                
                
                fw = new FileWriter(FILENAME);
		bw = new BufferedWriter(fw);  
                bw.write("<html>");
                bw.write("<head>");
                
                bw.write("<script src='https://code.jquery.com/jquery-1.12.4.min.js'>"); 
                bw.write("</script>");
                
                bw.write("<script type='text/javascript'>");
                bw.write("$(document).ready(function(){");
                bw.write("$('#btnGetValue').click(function() {");
                bw.write("var selValue = $('input[name=rbnNumber]:checked').val();");
                bw.write("$('p').html('<br/> ' + selValue + '');");
                bw.write("});");
                bw.write("});");
                bw.write("</script>");
                
                bw.write("<script>");
                bw.write("function buttonClickHandler()");
                bw.write("{");
                bw.write("}");
                bw.write("</script>");
                
                bw.write("<Table align='center' color = 'cyan'>"); 
                bw.write("<TR>");            
                bw.write("<TD align = 'center' width ='145'>");
                bw.write(Ad);
//                bw.write(WordA); 
//                bw.write(WordB);
//                bw.write(WordC);
//                bw.write(WordD);                
//                bw.write("Android is Advanaced Java"); 
                bw.write("</TD>");
                bw.write("</TR>");           
                bw.write("<TR>");            
                bw.write("<TD width ='45'>");            
                bw.write("<input type='radio' name='rbnNumber' value='You selected (a) " + WordA + "  which is "+ a +" the correct answer' />(a) "  + WordA + "<br/>");   
                bw.write("</TD>");
                bw.write("</TR>");  
                bw.write("<TR>");            
                bw.write("<TD>");            
                bw.write("<input type='radio' name='rbnNumber' value='You selected (a) " + WordB + "  which is "+ b +" the correct answer' />(a) "  + WordB + "<br/>");   
                bw.write("</TD>");
                bw.write("</TR>");  
                bw.write("<TR>");            
                bw.write("<TD>");            
                bw.write("<input type='radio' name='rbnNumber' value='You selected (a) " + WordC + "  which is "+ c +" the correct answer' />(a) "  + WordC + "<br/>");   
                bw.write("</TD>");
                bw.write("</TR>");  
                bw.write("<TR>");            
                bw.write("<TD>");            
                bw.write("<input type='radio' name='rbnNumber' value='You selected (a) " + WordD + "  which is "+ d +" the correct answer' />(a) "  + WordD + "<br/>");   
                bw.write("</TD>");
                bw.write("</TR>");   
                bw.write("</Table>");   
                
                bw.write("<Table align = 'center'>");   
                bw.write("<TR>");            
                bw.write("<TD>");            
                bw.write("<input type='button' id='btnGetValue' Value='Get Value' />");            
                bw.write("</TR>");            
                bw.write("</TD>");            
                bw.write("</Table>");   
            
                bw.write("<Table align = 'center'>");   
                bw.write("<TR>");            
                bw.write("<TD>");                        
                bw.write("<p></p>");
                bw.write("</TR>");            
                bw.write("</TD>");            
                bw.write("</Table>");
                bw.write("<Title>");
                bw.write(Ad);
                bw.write("</Title>");                               
                bw.write("</html>");                             
                }
                catch(IOException d)
                {
                    d.printStackTrace();                
                }
                finally{
			try {
				if (bw != null)
					bw.close();

				if (fw != null)
					fw.close();
			} catch (IOException ex) {
				ex.printStackTrace();
			}
		}                              
                }              
                }
                catch(IOException d)
                {
                    d.printStackTrace();
                }               
                finally {
			try {
				if (bw != null)
					bw.close();

				if (fw != null)
					fw.close();
			} catch (IOException ex) {
				ex.printStackTrace();
			}

		}
    }              
}       


Что я уже пробовал:

классы java, рефакторинг кода. до недавнего времени он работал нормально, но теперь выдает ошибку

java.io.FileNotFoundException: F:\Wonderful			.html (The filename, directory name, or volume label syntax is incorrect)
	at java.io.FileOutputStream.open0(Native Method)
	at java.io.FileOutputStream.open(FileOutputStream.java:270)
	at java.io.FileOutputStream.<init>(FileOutputStream.java:213)
	at java.io.FileOutputStream.<init>(FileOutputStream.java:101)
	at java.io.FileWriter.<init>(FileWriter.java:63)
	at html.FileWriteHtmlWithFor.main(FileWriteHtmlWithFor.java:65)

OriginalGriff

И что же?
Что он делает такого, чего вы не ожидали, или не делает того, что вы сделали?
Где ты застрял?
Какая помощь вам нужна?

Richard MacCutchan

Это сообщение об ошибке является вполне явным. Я бы посоветовал вам удалить все эти пробелы в имени файла.

0x01AA

Почему пробелы должны быть проблемой в именах файлов? По крайней мере, для Windows "1 . txt" - это допустимое имя файла. Начальные и конечные пробелы игнорируются файловой системой Windows.

Richard MacCutchan

Да, но если вы попробуете сделать это с Java, то получите вышеприведенное сообщение об ошибке. Попробуйте обойтись без пробелов, и все будет в порядке. Я попробую то же самое с C++ и C#, чтобы увидеть, как они ведут себя.

Richard MacCutchan

Та же проблема и с C/C++. Очевидно, Проводник Windows нашел способ обойти это. Я могу попытаться выяснить, как это сделать.

0x01AA

Это интересно, спасибо за информацию. Может быть, это как-то связано с именами файлов Unicode vs Ansi.

[Редактировать]
Просто попробовал это сделать с помощью c++ (bolrand c++ builder), никаких проблем с именем файла "1 . txt".

Richard MacCutchan

Вы правы, я просто попробовал его с именем Unicode, и он работает.

0x01AA

Большое вам спасибо за ваши отзывы. Я думаю, что есть также много того, что происходит за сценой при использовании той или иной библиотеки fio.

Richard MacCutchan

Взгляните на мой последний ответ.

solar os

именем на самом деле слово Андроид и прекрасные, которые являются n слов в блокноте файл
читатель читает эти слова и создает файлы с этим именем

Richard MacCutchan

Нет, это не так. Как ypu ясно видно из сообщения об ошибке имя файла F:\Wonderful .html И все эти пространства являются причиной проблемы.

0x01AA

Проверьте свое имя файла. Похоже, он содержит символы табуляции.

3 Ответов

Рейтинг:
20

Mehdi Gholam

Попробовать это :

...
                for(String Ada : Satellite)
                {             
                String Ad = Ada.trim(); // <-- trim the spaces from the string           
                String FILENAME = "F:\\"+Ad+".html";  
...


0x01AA

к вашему сведению: пробел-это допустимый символ имени файла

Mehdi Gholam

Да, но ошибка заключается в том, что файл не найден.

solar os

то, что worcs теперь тот же самый код был прекрасен раньше, то вдруг ошибка, слова. файл имеет два слова, но он создает + 1, то есть три файла, почему тай обнаружил, что это было слово, которое !был подстрижен

Рейтинг:
1

Richard MacCutchan

С исходным кодом возникли две проблемы:
1. ваше имя файла создавалось неправильно и включало в себя несколько пробелов. Это (к счастью) привело к сбою программы, что выявило ошибку, которую было довольно легко исправить.
2. попытка создать имя файла, содержащее встроенные пробелы, не будет работать, если строка находится в ASCII, как это было в данном случае. Чтобы исправить эту возможную проблему в будущем, вы можете добавить в свой код следующее:

try {

    String sfn = "F:\\"+Ad+".html";             // create the basic name
    byte[] bfn = sfn.getBytes("UTF16");         // convert to an array of Unicode bytes
    String FILENAME = new String(bfn, "UTF16"); // create a Unicode string from those bytes
    FileWriter fw = new FileWriter(FILENAME);   // create the file from the Unicode string
}
catch (Exception ex) {
      ex.printStackTrace();
}


0x01AA

А 5.

Richard MacCutchan

Спасибо; 5 баллов за утреннюю работу :)

Рейтинг:
1

Patrice T

java.io.FileNotFoundException: F:\Wonderful			.html (The filename, directory name, or volume label syntax is incorrect)

Вам говорят, что имя файла "F:\Wonderful       .html" не является законным. Можно догадаться, что проблема заключается в пробелах в названии.
Вам нужно удалить конечные пробелы и вкладки при построении имени файла.


0x01AA

Пробелы не были бы проблемой, я думаю (Windows accpets пробелы для имен файлов), но когда я копирую/вставляю имя файла, оно содержит вкладки, которые более проблематичны...

solar os

замечательный и Android-это слова, которые читаются в блокноте файл какие места вы talcing о Ф:\\"+объявление+".html как Ф:\\"+ объявление +".HTML или другой ты

solar os

почему файл не найден esception какой файл он ищет, код создает файл как слова из файла

Patrice T

- в html.FileWriteHtmlWithFor.main(FileWriteHtmlWithFor.java:65)'
Что такое строка 65 в вашем коде ?

solar os

Вау так много ответов ты