У меня возникла одна и та же проблема, и проблема заключалась в том, что у меня было несколько проектов в решении (Web
и Droid
), и хотя Default project
был выбран в Package Manager Console
, он использовал строку подключения из Droid
project:
PM> update-database -Verbose
Using StartUp project 'Droid'. <-- DROID
Using NuGet project 'Web'. <-- WEB
Specify the '-Verbose' flag to view the SQL statements being applied to the target database.
<!-- BAD TARGET DATABASE -->
Target database is: 'DefaultConnection' (DataSource: .\SQLEXPRESS, Provider: System.Data.SqlClient, Origin: Convention).
System.Data.SqlClient.SqlException (0x80131904): A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: SQL Network Interfaces, error: 26 - Error Locating Server/Instance Specified)
[REMOVED TEXT]
ClientConnectionId:00000000-0000-0000-0000-000000000000
Error Number:-1,State:0,Class:20
A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: SQL Network Interfaces, error: 26 - Error Locating Server/Instance Specified)
После установки Startup Project
на Web
и Default Project
в Package Manger Console
я получил его для работы.
Обратите внимание, что каждый из примеров кода ниже может выдать IOException
. Блоки try / catch / finally для краткости опущены.
Создание текстового файла (обратите внимание, что это будет перезаписывать файл, если он уже существует):
PrintWriter writer = new PrintWriter("the-file-name.txt", "UTF-8");
writer.println("The first line");
writer.println("The second line");
writer.close();
Создание двоичного файла (это также перезапишет файл):
byte data[] = ...
FileOutputStream out = new FileOutputStream("the-file-name");
out.write(data);
out.close();
Пользователи Java 7+ могут использовать класс Files
для записи в файлы :
Создание текстового файла:
List<String> lines = Arrays.asList("The first line", "The second line");
Path file = Paths.get("the-file-name.txt");
Files.write(file, lines, Charset.forName("UTF-8"));
//Files.write(file, lines, Charset.forName("UTF-8"), StandardOpenOption.APPEND);
Создание двоичного файла:
byte data[] = ...
Path file = Paths.get("the-file-name");
Files.write(file, data);
//Files.write(file, data, StandardOpenOption.APPEND);
public class Program {
public static void main(String[] args) {
String text = "Hello world";
BufferedWriter output = null;
try {
File file = new File("example.txt");
output = new BufferedWriter(new FileWriter(file));
output.write(text);
} catch ( IOException e ) {
e.printStackTrace();
} finally {
if ( output != null ) {
output.close();
}
}
}
}
output.close()
выбрасывает IOException
– Bob Yoplait
9 November 2017 в 16:19
Если у вас уже есть контент, который вы хотите записать в файл (и не генерируется «на лету»), добавление java.nio.file.Files
в Java 7 как часть встроенного ввода-вывода обеспечивает простейший и наиболее эффективный способ достижения ваших целей.
В основном создание и запись в файл - это только одна строка, более того, один простой вызов метода!
В следующем примере создается и записывается 6 разных файлы, чтобы продемонстрировать, как это можно использовать:
Charset utf8 = StandardCharsets.UTF_8;
List<String> lines = Arrays.asList("1st line", "2nd line");
byte[] data = {1, 2, 3, 4, 5};
try {
Files.write(Paths.get("file1.bin"), data);
Files.write(Paths.get("file2.bin"), data,
StandardOpenOption.CREATE, StandardOpenOption.APPEND);
Files.write(Paths.get("file3.txt"), "content".getBytes());
Files.write(Paths.get("file4.txt"), "content".getBytes(utf8));
Files.write(Paths.get("file5.txt"), lines, utf8);
Files.write(Paths.get("file6.txt"), lines, utf8,
StandardOpenOption.CREATE, StandardOpenOption.APPEND);
} catch (IOException e) {
e.printStackTrace();
}
Если мы используем Java 7 и выше, а также знаем, какой контент будет добавлен (добавлен) в файл, мы можем использовать метод newBufferedWriter в пакете NIO.
public static void main(String[] args) {
Path FILE_PATH = Paths.get("C:/temp", "temp.txt");
String text = "\n Welcome to Java 8";
//Writing to the file temp.txt
try (BufferedWriter writer = Files.newBufferedWriter(FILE_PATH, StandardCharsets.UTF_8, StandardOpenOption.APPEND)) {
writer.write(text);
} catch (IOException e) {
e.printStackTrace();
}
}
Есть несколько замечаний:
StandardCharsets
. try-with-resource
, в которой ресурсы автоматически закрываются после попытки. Хотя OP не спросил, но на всякий случай мы хотим искать строки с определенным ключевым словом, например confidential
мы можем использовать потоковые API в Java:
//Reading from the file the first line which contains word "confidential"
try {
Stream<String> lines = Files.lines(FILE_PATH);
Optional<String> containsJava = lines.filter(l->l.contains("confidential")).findFirst();
if(containsJava.isPresent()){
System.out.println(containsJava.get());
}
} catch (IOException e) {
e.printStackTrace();
}
Используя Google Guava-библиотеку, мы можем легко создать и записать файл.
package com.zetcode.writetofileex;
import com.google.common.io.Files;
import java.io.File;
import java.io.IOException;
public class WriteToFileEx {
public static void main(String[] args) throws IOException {
String fileName = "fruits.txt";
File file = new File(fileName);
String content = "banana, orange, lemon, apple, plum";
Files.write(content.getBytes(), file);
}
}
В примере создается новый файл fruits.txt
в корневом каталоге проекта.
Только одна строка! path
и line
являются строками
import java.nio.file.Files;
import java.nio.file.Paths;
Files.write(Paths.get(path), lines.getBytes());
lines
. Если это java.lang.String
, то вызов getBytes()
будет генерировать байты с использованием платформы default , что не очень хорошо в общем случае.
– afk5min
13 May 2015 в 04:45
Вот некоторые из возможных способов создания и записи файла в Java:
Использование FileOutputStream
try {
File fout = new File("myOutFile.txt");
FileOutputStream fos = new FileOutputStream(fout);
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(fos));
bw.write("Write somthing to the file ...");
bw.newLine();
bw.close();
} catch (FileNotFoundException e){
// File was not found
e.printStackTrace();
} catch (IOException e) {
// Problem when writing to the file
e.printStackTrace();
}
Использование FileWriter
try {
FileWriter fw = new FileWriter("myOutFile.txt");
fw.write("Example of content");
fw.close();
} catch (FileNotFoundException e) {
// File not found
e.printStackTrace();
} catch (IOException e) {
// Error when writing to the file
e.printStackTrace();
}
Использование PrintWriter
try {
PrintWriter pw = new PrintWriter("myOutFile.txt");
pw.write("Example of content");
pw.close();
} catch (FileNotFoundException e) {
// File not found
e.printStackTrace();
} catch (IOException e) {
// Error when writing to the file
e.printStackTrace();
}
Использование OutputStreamWriter
try {
File fout = new File("myOutFile.txt");
FileOutputStream fos = new FileOutputStream(fout);
OutputStreamWriter osw = new OutputStreamWriter(fos);
osw.write("Soe content ...");
osw.close();
} catch (FileNotFoundException e) {
// File not found
e.printStackTrace();
} catch (IOException e) {
// Error when writing to the file
e.printStackTrace();
}
Для дополнительной проверки этого руководства о том, как читать и записывать файлы в Java .
Если вы по какой-то причине хотите отделить действие создания и записи, эквивалент Java touch
-
try {
//create a file named "testfile.txt" in the current working directory
File myFile = new File("testfile.txt");
if ( myFile.createNewFile() ) {
System.out.println("Success!");
} else {
System.out.println("Failure!");
}
} catch ( IOException ioe ) { ioe.printStackTrace(); }
createNewFile()
, проверка наличия и файл создаются атомарно. Это может быть полезно, если вы хотите, чтобы вы были создателем файла, прежде чем писать его, например.
touch
в общем смысле, а скорее в своем общем вторичном использовании для создания файла без записи данных на него. Задокументированная цель - обновить временную метку файла. Создание файла, если оно не существует, действительно является побочным эффектом и может быть отключено с помощью переключателя.
– Mark Peters
21 August 2013 в 20:30
exists()/createNewFile()
последовательности буквально являются пустой тратой времени и пространства.
– user207421
26 November 2016 в 02:25
Вот небольшая примерная программа для создания или перезаписывания файла. Это длинная версия, поэтому ее легче понять.
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.Writer;
public class writer {
public void writing() {
try {
//Whatever the file path is.
File statText = new File("E:/Java/Reference/bin/images/statsTest.txt");
FileOutputStream is = new FileOutputStream(statText);
OutputStreamWriter osw = new OutputStreamWriter(is);
Writer w = new BufferedWriter(osw);
w.write("POTATO!!!");
w.close();
} catch (IOException e) {
System.err.println("Problem writing to the file statsTest.txt");
}
}
public static void main(String[]args) {
writer write = new writer();
write.writing();
}
}
Чтение коллекции с клиентами и сохранение в файл с помощью JFilechooser.
private void writeFile(){
JFileChooser fileChooser = new JFileChooser(this.PATH);
int retValue = fileChooser.showDialog(this, "Save File");
if (retValue == JFileChooser.APPROVE_OPTION){
try (Writer fileWrite = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(fileChooser.getSelectedFile())))){
this.customers.forEach((c) ->{
try{
fileWrite.append(c.toString()).append("\n");
}
catch (IOException ex){
ex.printStackTrace();
}
});
}
catch (IOException e){
e.printStackTrace();
}
}
}
close()
в любом потоке, обернутом вокруг любого другого, также закроет все внутренние потоки.
– Nic Hartley
18 November 2014 в 18:23
StandardCharsets.UTF_8
вместо "utf-8" String (Это предотвращает появление опечаток) ...new OutputStreamWriter(new FileOutputStream("myFile.txt"), StandardCharsets.UTF_8)...
- java.nio.charset.StandardCharsets
введен в java 7
– Ralph
29 March 2015 в 11:32
File.exists()/createNewFile()
не имеет смысла и бесполезен. Операционная система уже должна делать то же самое, когда создается new FileWriter()
. Вы заставляете все это происходить дважды.
– user207421
26 November 2016 в 02:22
FileNotFoundException
, который вызывается, когда операция завершается с ошибкой.
– user207421
26 November 2016 в 02:23
exists()/createNewFile()
последовательности буквально являются пустой тратой времени и пространства.
– user207421
26 November 2016 в 02:26
FileWriter
следующим образом: new FileWriter(file.getAbsoluteFile(),true)
– Adelin
23 February 2018 в 08:14
В Java 8 используйте файлы и пути и используя конструкцию try-with-resources.
import java.io.BufferedWriter;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
public class WriteFile{
public static void main(String[] args) throws IOException {
String file = "text.txt";
System.out.println("Writing to file: " + file);
// Files.newBufferedWriter() uses UTF-8 encoding by default
try (BufferedWriter writer = Files.newBufferedWriter(Paths.get(file))) {
writer.write("Java\n");
writer.write("Python\n");
writer.write("Clojure\n");
writer.write("Scala\n");
writer.write("JavaScript\n");
} // the file will be automatically closed
}
}
Если вы хотите иметь относительно безболезненный опыт, вы также можете взглянуть на пакет Apache Commons IO , более конкретно класс FileUtils
.
Никогда не забывайте проверять сторонние библиотеки. Joda-Time для обработки даты, Apache Commons Lang StringUtils
для обычных операций с строками и, таким образом, сделает ваш код более читаемым.
Java - отличный язык, но стандартная библиотека иногда немного низкоуровневая. Мощный, но низкий уровень, тем не менее.
FileUtils
- static void write(File file, CharSequence data)
. Пример использования: import org.apache.commons.io.FileUtils;
FileUtils.write(new File("example.txt"), "string with data");
. FileUtils
также имеет writeLines
, который принимает Collection
строк.
– Rory O'Kane
31 January 2014 в 01:51
лучший способ - использовать Java7: Java 7 вводит новый способ работы с файловой системой, а также новый класс утилиты - Files. Используя класс Files, мы можем создавать, перемещать, копировать, удалять файлы и каталоги; его также можно использовать для чтения и записи в файл.
public void saveDataInFile(String data) throws IOException {
Path path = Paths.get(fileName);
byte[] strToBytes = data.getBytes();
Files.write(path, strToBytes);
}
Запись с помощью FileChannel. Если вы имеете дело с большими файлами, FileChannel может быть быстрее стандартного ввода-вывода. Следующий код записывает String в файл с помощью FileChannel:
public void saveDataInFile(String data)
throws IOException {
RandomAccessFile stream = new RandomAccessFile(fileName, "rw");
FileChannel channel = stream.getChannel();
byte[] strBytes = data.getBytes();
ByteBuffer buffer = ByteBuffer.allocate(strBytes.length);
buffer.put(strBytes);
buffer.flip();
channel.write(buffer);
stream.close();
channel.close();
}
Запись с помощью DataOutputStream
public void saveDataInFile(String data) throws IOException {
FileOutputStream fos = new FileOutputStream(fileName);
DataOutputStream outStream = new DataOutputStream(new BufferedOutputStream(fos));
outStream.writeUTF(data);
outStream.close();
}
Запись с помощью FileOutputStream
Давайте посмотрим, как мы можем используйте FileOutputStream для записи двоичных данных в файл. Следующий код преобразует строковый int bytes и записывает байты в файл с помощью FileOutputStream:
public void saveDataInFile(String data) throws IOException {
FileOutputStream outputStream = new FileOutputStream(fileName);
byte[] strToBytes = data.getBytes();
outputStream.write(strToBytes);
outputStream.close();
}
Write with PrintWriter мы можем использовать PrintWriter для записи форматированного текста в файл:
public void saveDataInFile() throws IOException {
FileWriter fileWriter = new FileWriter(fileName);
PrintWriter printWriter = new PrintWriter(fileWriter);
printWriter.print("Some String");
printWriter.printf("Product name is %s and its price is %d $", "iPhone", 1000);
printWriter.close();
}
Запись с помощью BufferedWriter: используйте BufferedWriter для записи String в новый файл:
public void saveDataInFile(String data) throws IOException {
BufferedWriter writer = new BufferedWriter(new FileWriter(fileName));
writer.write(data);
writer.close();
}
добавьте строку в существующий файл:
public void saveDataInFile(String data) throws IOException {
BufferedWriter writer = new BufferedWriter(new FileWriter(fileName, true));
writer.append(' ');
writer.append(data);
writer.close();
}
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
public class FileWriterExample {
public static void main(String [] args) {
FileWriter fw= null;
File file =null;
try {
file=new File("WriteFile.txt");
if(!file.exists()) {
file.createNewFile();
}
fw = new FileWriter(file);
fw.write("This is an string written to a file");
fw.flush();
fw.close();
System.out.println("File written Succesfully");
} catch (IOException e) {
e.printStackTrace();
}
}
}
exists()/createNewFile()
последовательности буквально являются пустой тратой времени и пространства.
– user207421
26 November 2016 в 02:25
package fileoperations;
import java.io.File;
import java.io.IOException;
public class SimpleFile {
public static void main(String[] args) throws IOException {
File file =new File("text.txt");
file.createNewFile();
System.out.println("File is created");
FileWriter writer = new FileWriter(file);
// Writes the content to the file
writer.write("Enter the text that you want to write");
writer.flush();
writer.close();
System.out.println("Data is entered into file");
}
}
exists()/createNewFile()
последовательности буквально являются пустой тратой времени и пространства.
– user207421
26 November 2016 в 02:25
Вы даже можете создать временный файл с использованием системного свойства, которое не зависит от используемой ОС.
File file = new File(System.*getProperty*("java.io.tmpdir") +
System.*getProperty*("file.separator") +
"YourFileName.txt");
close()
в любом потоке, обернутом вокруг любого другого, также закроет все внутренние потоки.
– Nic Hartley
18 November 2014 в 18:23
StandardCharsets.UTF_8
вместо "utf-8" String (Это предотвращает появление опечаток) ...new OutputStreamWriter(new FileOutputStream("myFile.txt"), StandardCharsets.UTF_8)...
- java.nio.charset.StandardCharsets
введен в java 7
– Ralph
29 March 2015 в 11:32
File.exists()/createNewFile()
не имеет смысла и бесполезен. Операционная система уже должна делать то же самое, когда создается new FileWriter()
. Вы заставляете все это происходить дважды.
– user207421
26 November 2016 в 02:22
FileNotFoundException
, который вызывается, когда операция завершается с ошибкой.
– user207421
26 November 2016 в 02:23
exists()/createNewFile()
последовательности буквально являются пустой тратой времени и пространства.
– user207421
26 November 2016 в 02:26
FileWriter
следующим образом: new FileWriter(file.getAbsoluteFile(),true)
– Adelin
23 February 2018 в 08:14
"PrintWriter prints formatted representations of objects to a text-output stream. "
Ответ Божо более правильный, хотя он выглядит громоздким (вы всегда можете обернуть его каким-то способом утилиты). – leonbloy 21 May 2010 в 21:40writer.close()
должен быть в блоке finally – Thierry 11 May 2017 в 22:16