是什么区别StringWriter和StringBuilder,当我应该使用一个或其他?
我意识到在java中GC最终会清理对象,但是我问是不是关闭你的字符串编写器是不好的做法,目前我这样做:
private static String processTemplate(final Template template, final Map root) {
StringWriter writer = new StringWriter();
try {
template.process(root, writer);
} catch (TemplateException e) {
logger.error(e.getMessage());
} catch (IOException e) {
logger.error(e.getMessage());
}
finally {
}
return writer.toString();
}
Run Code Online (Sandbox Code Playgroud)
我应该关闭编写器并创建一个像这样的新String:
String result = "";
...
finally {
result = writer.toString();
writer.close();
}
Run Code Online (Sandbox Code Playgroud)
这样做更好吗?
我想清除XmlTextWriter和StringWriter中的所有内容.Flush()没有成功.
XmlDocument doc = new XmlDocument();
StringWriter sw = new StringWriter();
XmlTextWriter xw = new XmlTextWriter(sw);
xw.WriteStartElement("AddPhoneQual");
xw.WriteElementString("Type", "B");
xw.WriteElementString("PhoneNumber", bookingDetails.PassengerList[0].PhoneNumber);
xw.WriteEndElement(); //结束AddPhoneQual
doc.LoadXml(sw.ToString());
现在,我需要清除所有内容并开始用清晰的xw编写.
xw.Flush();
sw.Flush();
他们没有工作.
我有一个StringWriter变量,sw它由FreeMarker模板填充.填好后sw,如何将其打印到文本文件中?
我有一个for循环如下:
for(2 times)
{
template.process(data, sw);
out.println(sw.toString());
}
Run Code Online (Sandbox Code Playgroud)
现在,我只是输出到屏幕.我如何为文件执行此操作?我想,对于每个循环,我的意思sw都会改变,但我希望每个循环的数据都附加在文件中.
编辑:
我尝试了下面的代码.当它运行时,它确实显示file.txt已经更改,但是当它重新加载时,文件仍然没有任何内容.
sw.append("CheckText");
PrintWriter out = new PrintWriter("file.txt");
out.println(sw.toString());
Run Code Online (Sandbox Code Playgroud) 什么是Java StringWriter,什么时候应该使用它?
我已阅读文档并查看此处,但我不明白何时应该使用它.
我有一个应用程序,如果该文件尚不存在,则会创建一个文本文件,然后向其写入内容.当我创建并立即写入文件时,它第一次工作得很好.我的问题是,下次执行此代码并且文件已经创建时,它会在我尝试写入文件时抛出异常.我得到"文件被另一个进程使用"错误.
所以我创建它之后似乎需要关闭文件?我不知道怎么做,但它可能非常简单.我会发布一些代码,但它不是必需的,我只是使用一个香草味的字符串构建器和流编写器.
Private Sub createFileLocations()
If Not Directory.Exists("./Path") Then
Directory.CreateDirectory("./Path")
End If
If clsGeneralSettings.Printer1 IsNot Nothing Then
If Not File.Exists("./Path/File1" & ".txt") Then
File.Create("./Path/File1" & ".txt")
End If
End If
End Sub
Private Sub AppendTextFile(randomId As String, PrintDate As Date, PrintName As String)
Try
Dim _stringBuilder As StringBuilder = New StringBuilder
Dim _StreamWriter As StreamWriter
Dim fileName As String
If PrintName = clsGeneralSettings.Printer1 Then
fileName = "./Path/File1" & ".txt"
qPrinter1.Enqueue(randomId)
If qPrinter1.Count > 10 Then
qPrinter1.Dequeue()
End If
_stringBuilder.AppendLine(PrintDate + …Run Code Online (Sandbox Code Playgroud) 我需要从我的webbrowser中获取所有属性.当前,我正在使用GetAttribute(),但这样,我需要知道属性的名称.想象一下,我不知道我的webbrowser中有什么.我的C#代码:
StringWriter strWriter = new StringWriter();
XmlWriter xWriter = XmlWriter.Create(strWriter, new XmlWriterSettings() { Indent = true });
xWriter.WriteStartElement("Items");
foreach (HtmlElement el in webBrowser1.Document.GetElementsByTagName("TEXTAREA"))
{
xWriter.WriteStartElement("Item");
xWriter.WriteElementString("GUID", el.Id);
xWriter.WriteElementString("Type", el.GetAttribute("type").ToUpper());
xWriter.WriteElementString("Name", el.Name);
xWriter.WriteElementString("Value", el.GetAttribute("value"));
xWriter.WriteElementString("MaxLength", el.GetAttribute("maxlength"));
xWriter.WriteEndElement();
}
Run Code Online (Sandbox Code Playgroud)
我搜索了很多,但我没有找到任何有用的东西.
我使用以下内容呈现字符串的局部视图...
protected string RenderPartialViewToString(string viewName, object model)
{
if (string.IsNullOrEmpty(viewName))
viewName = ControllerContext.RouteData.GetRequiredString("action");
ViewData.Model = model;
using (var sw = new StringWriter())
{
ViewEngineResult viewResult = ViewEngines.Engines.FindPartialView(ControllerContext, viewName);
var viewContext = new ViewContext(ControllerContext, viewResult.View, ViewData, TempData, sw);
viewResult.View.Render(viewContext, sw);
return sw.GetStringBuilder().ToString();
}
}
Run Code Online (Sandbox Code Playgroud)
然而它返回带有如下所示的奇怪标签的html ...(我已经包含了一个小部分作为它的大视图)
<$A$><div</$A$><$B$> class="modal hide fade"</$B$><$C$> id="dialog"</$C$><$D$>
Run Code Online (Sandbox Code Playgroud)
整个HTML都会发生这种情况.这部分看起来应该是......
<div class="modal hide fade" id="dialog" style="display: none;">
Run Code Online (Sandbox Code Playgroud) asp.net-mvc viewengine stringwriter asp.net-mvc-partialview asp.net-mvc-4
我想逐行读取文本文件并编辑特定行。因此,我将文本文件放入字符串变量中,例如:
string textFile = File.ReadAllText(filename);
我的文本文件如下:
Line A
Line B
Line C
Line abc
Line 1
Line 2
Line 3
Run Code Online (Sandbox Code Playgroud)
我有一个特定的字符串(=“abc”),我想在此文本文件中搜索它。因此,我正在阅读这些行,直到找到字符串并在找到字符串之后转到第三行(“第 3 行”-> 该行始终不同):
string line = "";
string stringToSearch = "abc";
using (StringReader reader = new StringReader(textFile))
{
while ((line = reader.ReadLine()) != null)
{
if (line.Contains(stringToSearch))
{
line = reader.ReadLine();
line = reader.ReadLine();
line = reader.ReadLine();
//line should be cleared and put another string to this line.
}
}
}
Run Code Online (Sandbox Code Playgroud)
我想清除第三个读取行并将另一个字符串放入该行并将整个保存string到textFile.
我怎样才能做到这一点?
我正在使用.net并且需要获取一些html文本,所以我想我会一起使用HtmlTextWriter和StringWriter来获得格式正确的html.但是,尽管编写代码的方式各不相同,我仍然会收到静态代码分析器的警告(使用Microsoft All Rules).在下面的代码示例中,我在注释中显示代码分析器警告.为了简化代码,我实际上并没有对HtmlTextWriter进行任何调用(您将在每个函数中看到对该效果的注释).如何正确编写代码以避免警告?
// CA2000 : Microsoft.Reliability : In method 'Default.Func1()', object 'stringWriter' is not disposed along all exception paths. Call System.IDisposable.Dispose on object 'stringWriter' before all references to it are out of scope.
public static string Func1()
{
string html;
StringWriter stringWriter;
using (var writer = new HtmlTextWriter(stringWriter = new StringWriter()))
{
// You would do some stuff with the writer here, but not for this example.
html = stringWriter.ToString();
}
return html;
}
// CA2202 : Microsoft.Usage : …Run Code Online (Sandbox Code Playgroud) stringwriter ×10
.net ×3
c# ×3
java ×3
string ×2
asp.net-mvc ×1
ca2000 ×1
ca2202 ×1
file-io ×1
freemarker ×1
html ×1
io ×1
stringreader ×1
vb.net ×1
viewengine ×1
xml ×1
xmlwriter ×1