Я пытаюсь передать свойства из java.util.Properties в онлайн-файл, используя его URL-адрес.
Это код, который у меня есть на данный момент:
public static boolean savePropertiesToURL(Properties properties, String link, String fileName) {
boolean result = false;
if (properties != null && link != null && fileName != null) {
try {
URL url = new URL(link);
try {
URLConnection connection = url.openConnection();
connection.setDoOutput(true);
try {
OutputStream outStream = connection.getOutputStream();
try {
properties.store(outStream, fileName);
} catch (IOException ex) {
System.err.println("Unable to store the properties: " + ex.getMessage());
} finally {
try {
outStream.flush();
result = true;
} catch (IOException ex) {
Logger.getLogger(PropertiesUtil.class.getName()).log(Level.SEVERE, null, ex);
System.err.println("Unable to flush outputstream: " + ex.getMessage());
}
outStream.close();
}
} catch (IOException ex) {
System.err.println("Unable to get outputstream: " + ex.getMessage());
}
} catch (IOException ex) {
System.err.println("Unable to open URL connexion: " + ex.getMessage());
}
} catch (MalformedURLException ex) {
System.err.println("The URL hasn't been created: " + ex.getMessage());
}
}
return result;
}
Он проходит через все это и возвращает истину. Даже несмотря на то, что файл не записывается. В каждом улове есть регистраторы, но ни один улов никогда не срабатывает.
Чувак, я надеюсь, что ты не используешь такую обработку ошибок в повседневной жизни, что кажется такой головной болью! Если вы просто собираетесь прервать поток выполнения, когда поймаете ошибку, почему бы не позволить ему бросить и естественным образом не прервать поток выполнения? Или, если ваш метод не должен бросать, просто сделайте одну большую ловлю всех
@khelwood Конечно, я могу это изменить. Но не думаю, что конечный результат изменится. я попытаюсь
Также вы используете переменную url, переменную URL и класс URL - все в одном методе. Более творческие имена переменных помогут избежать путаницы.
В любом случае проблема в том, что Properties созданы для записи в файл (они просто записывают key=value\n в свой OutputStream), но конечные точки URL обычно не предназначены для обработки таких данных; должен быть сервер, отвечающий на URL-адрес, и ему не должно нравиться то, что вы ему отправляете.
@Aaron Как вы хотите обработать ошибку и отладить, если вы просто попробуете и поймаете? Это единственный способ, которым я понял
Зависит от того, какую обработку вы хотите выполнить. В предыдущей версии вашего кода все, что вы делали, - это останавливали выполнение, используя блоки if, но выполнение все равно было бы остановлено, если вы не обнаружили ошибок. Если вы хотите сделать что-то конкретное, поймайте, сделайте это и либо верните, либо повторите, чтобы избежать запуска остальной части кода. Если вы не хотите делать что-то конкретное, либо не поймите, если вы можете изменить подпись метода, либо используйте один улов, который просто вернет значение ошибки, если вы не можете.




Этот код был бы намного понятнее, если бы вы использовали
return falseвместоresult = falseи, таким образом, избегали всех этих вложенных операторовif.